You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环遍历列表删除元素时部分实例被跳过的问题

遍历列表时删除元素导致跳过实例的原因及解决方法

问题原因

在for循环中直接遍历原列表并删除元素时,Python的列表迭代器是按索引顺序推进的。每次删除元素后,列表中后续元素会自动左移填补空缺,但迭代器的索引不会回退,直接跳到下一个位置,导致跳过了被删除元素的下一个元素。

拿你的代码举例:

  • 初始列表:[12, 25, 36, 48, 3, 5, 7, 2, 4, 13, 22, 19]
  • 第一次循环取12,满足条件删除,列表变为[25, 36, 48, 3, 5, 7, 2, 4, 13, 22, 19],迭代器接下来指向索引1(对应元素36)
  • 删除36后,列表变为[25, 48, 3, 5, 7, 2, 4, 13, 22, 19],迭代器直接跳到索引2(对应元素3),完全跳过了现在在索引1的48
  • 后面删除2时,4会左移到2原来的位置,但迭代器已经走到下一个索引,所以4也被跳过了。

解决方法

方法1:遍历列表的副本

通过遍历原列表的副本,修改原列表的操作不会影响遍历过程:

my_list = [12, 25, 36, 48, 3, 5, 7, 2, 4, 13, 22, 19]

for num in my_list.copy():  # 遍历副本而非原列表
    if num % 2 == 0:
        my_list.remove(num)

print(my_list)  # 输出: [25, 3, 5, 7, 13, 19]

方法2:使用列表推导式(推荐)

列表推导式是Python中筛选元素的高效方式,直接生成符合要求的新列表,从根源避免遍历修改原列表的问题:

my_list = [12, 25, 36, 48, 3, 5, 7, 2, 4, 13, 22, 19]
my_list = [num for num in my_list if num % 2 != 0]

print(my_list)  # 输出: [25, 3, 5, 7, 13, 19]

方法3:倒序遍历列表

倒序遍历的时候,删除后面的元素不会影响前面元素的索引位置,迭代器从后往前推进,不会出现跳过的情况:

my_list = [12, 25, 36, 48, 3, 5, 7, 2, 4, 13, 22, 19]

for num in reversed(my_list):
    if num % 2 == 0:
        my_list.remove(num)

print(my_list)  # 输出: [25, 3, 5, 7, 13, 19]

内容的提问来源于stack exchange,提问作者Bhargav Borkhatariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:35:15