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
相关产品推荐
相关产品推荐

