为什么列表不迭代直到结束并在python中弹出所有项目

时间:2018-08-17 14:50:12

标签: python list stack pop

我希望for循环迭代次数,items中有my_list,并且在每次执行过程中相应地popsitems my_list并将它们添加到purchase_list中,直到弹出my_list的所有元素并将其附加到purchase_list中。 但是不会发生。为什么?

my_list = ['pen' , 'pencil' , 'cell phone' , 'axiom team' , 'panacloud' ]
purchase_list = []
for items in my_list:
    purchase_item = my_list.pop()
    purchase_list.append(purchase_item)

print(purchase_list)

输出如下:

['panacloud', 'axiom team', 'cell phone']

修改 我解释说,我希望循环像我所说的那样运行。清除这一点,我不想知道另一种方法。但是想知道为什么以及如何给我这个输出。

2 个答案:

答案 0 :(得分:1)

在遍历列表时不要pop

如果您要清空一个列表并填写另一个列表,请使用:

my_list = ['pen' , 'pencil' , 'cell phone' , 'axiom team' , 'panacloud' ]

purchase_list = my_list  # ['pen', 'pencil', 'cell phone', 'axiom team', 'panacloud']
my_list = []             # []

答案 1 :(得分:1)

您的问题是为什么您的代码无法正常工作。在迭代期间,弹出元素在Python中绝不是好主意。在迭代和弹出时,实际上是从前面进行迭代,同时在同一循环中删除(缩小)列表(从后面)。这就是循环执行三次的原因,因为其他元素在前两次迭代中被删除。

为什么不仅仅反转列表并创建新列表?

new_list = list(reversed(my_list))

如果您希望清空new_list

new_list =[]

或者如果要删除

del my_list