我对python很新,所以如果这是一个相当noob的问题,我很抱歉。但是我正在编写一个由.txt文件中带有for循环的数据组成的2D列表(所有代码都可以工作),但是循环似乎每次都会覆盖我以前写过的所有数据,即使我是
这不是我的实际代码,但总结了我遇到的问题。
stuff = [[None]*3]*10
for index in range(10):
stuff[index][2]=index
print(stuff)
[[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9]]
为什么所有值都返回为9,为什么我必须做什么才能让它返回
[[None, None, 1],[None, None, 2],[None, None, 3],[None, None, 4],[None, None, 5],[None, None, 6],[None, None, 7],[None, None, 8],[None, None, 9]]
答案 0 :(得分:1)
您要在列表中放置十次相同的确切数组。更新其中一个阵列正在更新所有阵列。尝试:
stuff = [[None]*3 for i in xrange(10)]
答案 1 :(得分:1)
发生这种情况的原因是因为你的第一行:
stuff = [[None]*3]*10
这实际上只是创建1
数组[[None]*3]
,然后引用它10
次。
所以你的数组实际上类似于:
[[[None]*3], reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0]
将您的第一行更改为:
stuff = [[None]*3 for i in xrange(10)]
这将在数组中的每个位置创建一个唯一元素。