2017-02-28 325 views
-1

我想列出5個列表。Python:列表輸出列表

我這樣做,通過web = [[]]*5

現在我想在與值1「列出的名單」和2

web[0].append(1) 
web[0].append(2) 

更新第一列表中,但我的輸出是

[[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2], 
[1, 2]] 

但不應該只更新第一個列表? 我所需的輸出是如下

[[1, 2], 
[], 
[], 
[], 
[], 
[], 
[], 
[], 
[], 
[]] 

回答

-3

創建列表的方式,創建副本only.You可以創造,而這種方式:當您創建web = [[]]*5

[ 
[1, 2], 
[], 
[], 
[], 
[] 
] 
+0

他重複同一陣列是的,因爲他是如何試圖初始化數組,所以任何追加到列表中的一個將附加到他們,因爲他們是同一個對象。 – TemporalWolf

+0

你說得對。我編輯了我的答案。 – Inconnu

4

n = 5 #range 
web = [[] for _ in range(n)] 

web[0].append(1) 
web[0].append(2) 
print(web) 

輸出繼電器,你實際上是在創建一個對同一個對象的引用數組([] s的列表)。所以當你通過一個引用改變對象時,這會改變列表中的所有條目。

對於初學者來說,這是一個非常常見的Python'gotcha'。

試試這個:

web = [[] for x in xrange(5)] 
+0

你能指點我的參考嗎?更多關於 –

+0

@ReynardAsis的解釋請查看[這裏](http://stackoverflow.com/questions/240178/list-of-lists-changes-reflected-across-sublists-unexpectedly) –

+0

而不是回答一個「常見的Python」疑難雜症「,並鏈接到它的規範頁面,你可以標記問題作爲一個重複的封閉。這減少了碎片並使網站更易於使用。 – TigerhawkT3