Python—更改列表列表中的元素
我正在尝试更改列表列表中的一个元素。这是我的代码,我使用的是python版本3:Python—更改列表列表中的元素,python,list,nested,element,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
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。救命啊 您的错误是因为colList是指向列表的指针,而不是列表本身。 如果您想在
myboard
的每个元素中都有一个“独立”列表,您必须替换myboard.append(colList)
withmyboard.append(colList.copy())
这样,myboard的每个元素都将是列表的副本。简短解决方案:
正如Donbeo指出的,您必须将
myboard.append(colList)
替换为myboard.append(colList.copy)
为什么?
因为在python中,当你引用任何可变对象(让我们称之为foo)时,它永远是一个精确的副本。例如
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]
;现在尝试条[0][1]=999
。它的ALIVEIt工作正常。现在bar[1][1]!=条形图[0][1]
演示
将
myboard.append(colList)
替换为myboard.append(colList.copy())