我有一个列表列表,我希望在迭代时更新每个列表。 我按如下方式初始化了我的列表:
my_list = [[0]*n]*n
当我想更新内部列表时,通过以下方式:
for i in range(something):
for j in range(anotherthing):
my_list[i][j] = something
只要在每次迭代时更新整个列表而不是第i个列表,例如, [[1,2],[1,2]]。 我想要的是在我初始化它的第一次迭代时[[1,2],[0,0]],并且成为[[1,2],[values]]。我做错了什么?
答案 0 :(得分:3)
列表乘法运算符*
不会创建副本,但会创建对同一数据的多个引用。而不是使用*
考虑使用理解来初始化列表:
my_list = [[0 for i in range(n)] for j in range(n)]
答案 1 :(得分:0)
使用它来初始化列表列表,它可以正常工作。
x = [[0]*n for i in range(n)]
原始代码也创建了一个子列表列表,但每个子列表都引用了同一个对象。
注意:我使用的是Python3。如果您使用的是2,则可能需要使用xrange()而不是range()。