将列表附加到python中的列表列表中会更改所有子列表

时间:2016-09-15 14:08:10

标签: python list append

我正在尝试在列表中创建并附加列表和索引。附加任何列表元素将自动附加到此列表中可用的所有列表中 首先,我有一个列表如下

sygma_list [[]] * 3

我有另一张表格

mts_columns1 = [[1,2,3], [4,5,6], [6,7,8]]
mts_columns2 = [[1,2,3], [4,5,6], [6,7,8]]

当循环遍历sygma_list时,我喜欢这样:

 for i in range(0, 3):
       sygma_list[i].append(mts_column[i])

sygma_list的结果非常令人震惊,因为append()在列表的每个元素上表现而不是获得

的最终结果
sygma_list = [[[1,2,3], [1,2,3]],
              [[4,5,6],[4,5,6]],
              [[6,7,8],[6,7,8]]]

1 个答案:

答案 0 :(得分:5)

代码中最大的问题是:执行此操作时:

__add__

你在同一个列表上创建一个size-3引用数组:不是你通常想要的,当然不是在这里

请改为:

sygma_list = [[]] * 3

这将创建3个不同的列表。

(这个构造适用于不可变对象,如[0] * 3或[“foo”] * 4)

让我们考虑一下这个固定的代码:

sygma_list = [list() for x in range(3)]

的产率:

sygma_list = [list() for _ in range(3)]

mts_column = [[1,2,3], [4,5,6], [6,7,8]]

for i in range(0, 3):
    sygma_list[i].append(mts_column[i])

print(sygma_list)

顺便说一句:不确定是否要追加或扩展您的列表(否定它)

[[[1, 2, 3]], [[4, 5, 6]], [[6, 7, 8]]]

会列出清单,而不是列出清单列表