我列出了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]。
答案 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]
(等)