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

