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

Python移除列表中的零:索引越界错误修正求助

嘿,这个问题我之前也踩过坑!原因其实很直白:你在遍历列表的同时直接删除元素,会导致列表的长度不断缩短,但循环还是按照最初的列表长度来执行——当循环走到后面的索引时,列表已经没有对应的元素了,自然就抛出索引越界错误啦。

下面给你几个靠谱的修正方案:

方法1:遍历列表的副本

通过遍历原列表的快照(副本),原列表的修改就不会影响循环的遍历过程:

X = [0,5,0,0,3,1,15,0,12]
# 用list(X)或者X[:]都能创建原列表的副本
for value in list(X):
    if value <= 0:
        X.remove(value)
print(X)  # 输出: [5, 3, 1, 15, 12]
方法2:使用列表推导式(推荐,最简洁优雅)

这是Python处理这类筛选问题的标准操作,直接生成一个不包含零元素的新列表:

X = [0,5,0,0,3,1,15,0,12]
X = [num for num in X if num > 0]
print(X)  # 输出: [5, 3, 1, 15, 12]
方法3:反向遍历原列表

如果一定要在原列表上直接修改,反向遍历是个聪明的选择——从后往前遍历的话,删除后面的元素不会影响前面的索引位置:

X = [0,5,0,0,3,1,15,0,12]
# 从最后一个索引开始,逐步往前遍历到0
for i in range(len(X)-1, -1, -1):
    if X[i] <= 0:
        del X[i]
print(X)  # 输出: [5, 3, 1, 15, 12]

再回头说下你原来的代码为啥出错:初始时len(X)是9,循环会从0跑到8。当你删除第一个0后,列表长度变成8,但循环还是会继续执行到索引8,可这时列表只有0到7的索引了,于是就触发了索引越界的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:56:00