我找到了一种制作循环列表的好方法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/