在Python3
问题描述:
列表的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相同!!!!!
任何人都可以告诉我为什么是这样的????????
答
因为您不是追加拷贝的列表,而是实际的列表对象本身。考虑此方案:
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
答
它这样做,因为你告诉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到位。
...因为这就是你所要做的。 '......'是“这是我自己的副本,它不能被打印,因为我们整天都在这里。” –