2017-09-08 55 views
0

我想在python中列出一個列表。所以,現在當我print adj,我得到追加到Python列表中的列表2.7

n = 3 
adj = [[]]*n 

:我初始化這個名單像

[[], [], []] 

...這是罰款。

現在,我想追加值到一個特定的列表(一個特定的索引)。我已經做到了這一點:

adj[0].append(1) 

因此,我預期成果是:

[[1], [], []] 

但是輸出是:

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

我似乎無法理解爲什麼會這樣。可能我不瞭解Python的列表如何工作,或者犯了一個非常愚蠢的錯誤。任何幫助將不勝感激。

此外,我真的很感激有關如何獲得我想要的輸出的建議。

Ideone link here.

回答

2

預計此行爲在Python。在這種情況下使用*運算符會創建引用list()對象,這意味着當您修改一個此類對象時(例如您使用append()操作),可以將所有引用修改爲該對象。

爲了讓您所需的輸出,我會建議使用一個循環來創建不在對方的別名列表:

>>> adj = [[] for i in range(3)] 
>>> adj[0].append(1) 
>>> [[1], [], []] 
+0

哇,我不知道。非常感謝你的解釋。你能提出一個解決方法嗎? –

+1

這是一個重複的,在這裏問了一千次。檢查鏈接(改用列表理解) –