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