Python循环无法删除指定元素,报列表索引越界问题求助
问题排查与解决方案
问题根源
- 你用初始列表长度生成的
range(sum)做循环,删除元素后列表长度会缩短,当循环到后面的索引时,这些索引已经超出了新的列表长度,直接触发list index out of range错误。 - 另外,删除元素后,列表中后续元素会向前移位,但循环的
x仍按原顺序递增,会跳过紧邻被删除元素的下一个项,导致部分符合条件的元素没被删除,出现删除失效的情况。
解决方案
方法1:反向遍历删除
从列表末尾往前遍历,删除前面的元素不会影响未遍历到的元素索引,彻底避免越界和跳过问题:
import json parse = json.loads(message) # 从最后一个索引倒序遍历到0 for x in range(len(parse["b"]) - 1, -1, -1): if parse["b"][x][1] == "0.00000000": del parse["b"][x]
方法2:列表推导式(推荐)
直接生成不包含目标项的新列表,写法简洁高效,完全规避索引相关问题,是Python处理这类场景的惯用方式:
import json parse = json.loads(message) # 过滤掉第二个元素为"0.00000000"的所有项 parse["b"] = [item for item in parse["b"] if item[1] != "0.00000000"]
内容的提问来源于stack exchange,提问作者rizy
相关产品推荐
相关产品推荐

