Python-在列表列表中更改元素

时间:2014-11-15 22:21:28

标签: python list nested element

我试图更改列表列表中的元素。这是我的代码,我使用的是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.请帮助!

2 个答案:

答案 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]

演示


Demo