为何在for循环中调用pop()无法删除列表的全部元素?
为何在for循环中调用pop()无法删除列表的全部元素?
嘿,这个问题其实是因为for循环的迭代逻辑和你在循环里修改列表的操作冲突了,我给你一步步拆解下代码的执行过程,你就明白为啥1和3留了下来:
初始列表是 a = [1,3,4,5],当你用for i in a开始循环时,Python会先创建一个基于当前列表的迭代器,这个迭代器会按照列表初始的元素顺序依次取元素。
我们来走一遍每一步:
- 第一次循环:迭代器取第一个元素
1赋值给i,然后执行a.pop()——默认弹出最后一个元素,也就是5,此时列表变成[1,3,4]。 - 第二次循环:迭代器接着取原列表的第二个元素,也就是现在列表里的
3赋值给i,然后a.pop()弹出4,列表变成[1,3]。 - 这时候,迭代器已经遍历完原列表的前两个元素了(原列表初始有4个元素,迭代器本来要走4步,但现在列表只剩2个元素,迭代器认为自己已经完成遍历,直接退出循环)。
所以最后就剩下了1和3没被处理。
那如果想删除所有元素,该怎么做?给你几个靠谱的办法:
- 用
while循环,判断列表是否为空,直到弹完所有元素:a = [1,3,4,5] while a != []: print(a.pop()) else: print('Stack empty') - 或者遍历列表的副本,这样修改原列表不会影响迭代过程:
a = [1,3,4,5] for i in a.copy(): # 遍历副本 if a != []: print(a.pop()) else: print('Stack empty') - 也可以反向遍历原列表,这样弹出最后一个元素不会干扰迭代的顺序:
a = [1,3,4,5] for i in reversed(a): if a != []: print(a.pop()) else: print('Stack empty')
备注:内容来源于stack exchange,提问作者Thyagu V
相关产品推荐
相关产品推荐

