2017-07-25 46 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到位。