python - 自动生成的列表行为不正常

标签 python list loops

我找到了一种制作循环列表的好方法here 。代码按照我的需要运行。

x=["alpha","betta", "gamma"]
y=[[] for _ in range(len(x))]
y[1]=3

将按预期给我 [[], 3, []] 。但是当我尝试升级代码时:

z=[10,20,30]
x=["alpha","betta"]
y=[[] for _ in range(len(z))]
y=[y for _ in range(len(x))]
y[1][1]=4

会给我正确的形状,但我会得到[[[], 4, []], [[], 4, []]]

而不是 [[[], [], []], [[], 4, []]] 我显然已经陷入了链接中提到的陷阱,但我不'不明白为什么以及如何避免这个问题

最佳答案

这是您的代码出错的地方:

y=[y for _ in range(len(x))]

因为您本质上是创建两个指向同一列表的指针(即 y)。相反,你可以尝试这样的事情:

y=[y.copy() for _ in range(len(x))]

这解决了您创建新列表后的问题。

关于python - 自动生成的列表行为不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904660/

相关文章:

python - 如何在不使用外部 API 的情况下从 python 中的串口读取?

r - 矩阵列表乘以标量,Rcpp 中不保留维度属性

c - 使用 getNum();正确和无限循环问题

Java 在循环期间暂停

python - 在 Scrapy 中发送帖子请求

python - 将SQLalchemy查询结果传递给scrapy中的start_urls

Android Listview 在适配器更改后保留旧项目

asp.net - ASP.Net/C#,在页面上的某些控件之间循环?

python - 如果元素以另一个列表中的元素结尾,则从列表中删除元素的结尾

c++ - 为什么 --list.end() 编译?