2016-09-15 137 views
1

我试图在列表中创建并追加列表和索引。追加任何列表元素如下将列表添加到python列表中更改所有子列表

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的结果是相当令人震惊的,因为追加()被表现的升中的每个元素IST,而不是获得的

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

回答

5

在你的代码的最大抓一个最后的结果是这样的:当你这样做:

sygma_list = [[]] * 3 

您创建一个大小-3阵列相同的列表引用:不是说你一般都希望,肯定不会在这里

而是执行此操作:

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

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

(这个构建体是对于像不变对象行[0] * 3或[ “foo” 的] * 4)

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

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]]] 

BTW:不知道,如果你想附加或扩展您的列表(扁平与否)

sygma_list[i].extend(mts_column[i]) 

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

+0

为什么这是低票? – Tobias

+0

我想这是因为这个问题并不清楚什么是“令人惊讶”的结果,并增加了混淆。我得到了不同的预期结果。我编辑了我的帖子。内部列表数组的重复是重点。 –

+0

我的意思是你的答案首先被低估了。 – Tobias