迭代时更新列表列表

时间:2016-03-25 05:10:50

标签: python

我有一个列表列表,我希望在迭代时更新每个列表。 我按如下方式初始化了我的列表:

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]]。我做错了什么?

2 个答案:

答案 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()。