我尝试更新的2D列表有什么问题?

时间:2018-11-23 13:44:21

标签: python-3.x

我列出了2D列表:

list1 = []
liste = [0, 0, 0, 0, 0]
for i in range(93):
    list1.append(liste)

然后尝试通过以下方法更新其中之一的元素:

stemmer_tall = [123, 3321, 3442, 23, 1]

for i in range(5):
    list1[0][i] += stemmer_tall[i]

当我这样做时,它不仅会更新列表中的第一个列表,还会更新所有列表。怎么了我想不通。

编辑:我想要一个带有92个列表的列表,其中只有零个。但是第一个列表应该是[123,3321,3442,23,1]。

3 个答案:

答案 0 :(得分:1)

您每次都将相同的引用添加到列表。 因此,list1中的每个项目都指向同一个liste变量。

您可以制作阵列的新副本。看起来像这样:

list1 = []
liste = [0, 0, 0, 0, 0]
for i in range(93):
    list1.append(liste.copy())

stemmer_tall = [123, 3321, 3442, 23, 1]
for i in range(5):
    list1[0][i] += stemmer_tall[i]

答案 1 :(得分:0)

您一次又一次地添加相同的列表。在python中,当您创建列表为

liste = [0, 0, 0, 0, 0]

liste本质上是对您刚刚创建的列表的引用。然后,当您一遍又一遍地将此引用附加到另一个列表中时,

list1 = []
for i in range(93):
    list1.append(liste)

您一次又一次地添加相同的参考文献;但它们都指向同一列表。如果要创建其他列表,则应创建其他列表:

list1 = []
for i in range(93):
    list1.append([0]*5)

现在,如果您更改其中一个列表,其他列表将不会更改。

答案 2 :(得分:0)

无需单独添加stemmer_tall中的每个列表元素。您只需将其分配给list1中的第一个列表:

list1 = []
liste = [0, 0, 0, 0, 0]
for i in range(93):
    list1.append(liste)

stemmer_tall = [123, 3321, 3442, 23, 1]
list1[0] = stemmer_tall

输出(已通过Repl.it测试)

[123, 3321, 3442, 23, 1]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]

(等)