2016-09-15 52 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