我试图更改列表列表中的元素。这是我的代码,我使用的是python版本3:
myboard = []
colList = []
#makes a 2D list/array of the rows and colums
for i in range(columns):
colList.append(0)
for x in range(rows):
myboard.append(colList)
myboard[0][1] = 999
print(myboard[0][1])
当我这样做时,它会将每个列表中的所有第1个元素更改为999.请帮助!
答案 0 :(得分:1)
您的错误是由于colList是指向列表的指针而不是列表本身。
如果你想拥有"独立"在myboard
的每个元素中列出您必须替换的内容
myboard.append(colList)
与myboard.append(colList.copy())
这样,myboard的每个元素都将成为列表的副本。
答案 1 :(得分:0)
正如Donbeo指出,您必须将myboard.append(colList)
替换为myboard.append(colList.copy)
因为在python中,当你对任何可变对象(让我们称之为foo)进行引用(使用in bar)时,它是一个完全复制品,永远。因此,例如foo = [1,2,3]
和bar = [foo, foo, foo]
会bar = [[1,2,3],[1,2,3],[1,2,3]]
。现在我们假设您将foo更改为[3,2,1]
,然后禁止更新并变为[[3,2,1],[3,2,1],[3,2,1]]
。那么,bar[0][1] = 999
出了什么问题。好吧,bar[0] == foo
因此bar[0][1] == foo[1]
现在在python中有一个简单的解决方案!列表有一个复制方法,可以创建foo时不会更改的副本。例如foo = [1,2,3]
和bar = [foo.copy, foo.copy]
;现在尝试bar[0][1] = 999
。 ITS ALIVE 它正常工作。现在bar[1][1] != bar[0][1]
。