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

Python遍历列表删除其中0时出现IndexError报错该如何解决?

报错原因分析
  • 逻辑错误:代码中判断条件if i == 0的i是循环索引,而非列表元素值,你实际要删除的是值为0的元素,而非索引为0的元素,判断逻辑完全不符合需求。
  • 越界错误:range(len(list))会在循环启动前就固定生成和初始列表长度匹配的索引序列,你删除元素后列表实际长度缩短,后续循环访问超出当前列表索引范围的位置,就会抛出IndexError: list index out of range。
    额外注意:不要用list作为变量名,这会覆盖Python内置的list类型,后续调用列表相关方法会引发异常。
修复方案

方案1:列表推导式(最推荐)

直接生成过滤掉0的新列表,无需修改原列表,写法简洁性能最优:

original_list = [1, 2, 0, 4, 5]
filtered_list = [num for num in original_list if num != 0]
# 打印结果
for num in filtered_list:
    print(num)

运行输出:

1
2
4
5

方案2:必须修改原列表时,倒序遍历索引

倒序遍历删除元素不会影响未遍历位置的索引,不会出现越界问题:

original_list = [1, 2, 0, 4, 5]
# 从最后一个索引倒序遍历到0
for i in range(len(original_list)-1, -1, -1):
    if original_list[i] == 0:
        del original_list[i]
# 打印结果
for num in original_list:
    print(num)

方案3:遍历原列表的拷贝修改原列表

遍历原列表的浅拷贝,根据元素值删除原列表对应内容:

original_list = [1, 2, 0, 4, 5]
for num in original_list.copy():
    if num == 0:
        original_list.remove(num)
# 打印结果
for num in original_list:
    print(num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:57:01