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

Python 3.x 我尝试更新的2D列表有什么问题?,python-3.x,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] 当我这样做时,它不仅会更新列表中的第一个列表,还会更新所有列表。这里怎么了?

我制作了一个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个列表的列表,只有0个。但是第一个列表应该是[123、3321、3442、23、1]。

您可以反复添加相同的列表。在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)

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

无需单独在
词干分析器中添加每个列表元素。您只需将其分配到
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测试)


(etc)

您每次都在向列表添加相同的引用。 因此,
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]

预期产量是多少?结果列表应该是什么样的?可能重复的
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]