2017-07-25 45 views
0

列表的append()方法的問題,例如,我有一個列表:在Python3

mylist = [1,2,3] 

大家都知道追加()可以在列表類似的末尾添加一個新項目:

mylist.append(4) 

現在MYLIST爲[1,2,3,4]

我的問題是,當MYLIST追加本身發生了什麼????

mylist.append(mylist) 

起初,我認爲這將是這樣的:

[1,2,3,4,[1,2,3,4]] 

但是當我打印出來,輸出爲[1,2,3,4,[...]],所以我打印mylist [5]和mylist是一樣的:[1,2,3,4,[...]]

所以你可以循環列表的最後一項無盡,最後一項永遠是與原始mylist相同!!!!!

任何人都可以告訴我爲什麼是這樣的????????

+1

...因爲這就是你所要做的。 '......'是「這是我自己的副本,它不能被打印,因爲我們整天都在這裏。」 –

回答

0

因爲您不是追加拷貝的列表,而是實際的列表對象本身。考慮此方案:

mylist = [1,2,3,4] 
mylist.append(mylist) 
assert id(mylist) == id(mylist[4]) 

列表的最後一個項目是列表本身的參考,讓您擁有一個完全遞歸的,自我指涉的數據結構。

如果你想要的結果[1,2,3,4,[1,2,3,4]],則需要追加原始列表的副本,就像這樣:

mylist = [1,2,3,4] 
mylist.append(list(mylist)) 
assert mylist == [1,2,3,4,[1,2,3,4]] 
+0

謝謝,我認爲是這個原因。我通常使用Swift進行開發,並且這個問題在Swift中不一樣 – sides

0

它這樣做,因爲你告訴Python來追加一個列表(my_list)至一個列表。如果你想擴展與列表中的內容列表,你可以這樣做:

new_list = old_list + new_list 
output: [1, 2, 3, 4, 1, 2, 3, 4] 

,或者您可以使用extend方法。

old_list.extend(my_list) 

這將修改old_list到位。