Python用for循环删除列表元素报IndexError索引越界错误如何解决
代码报错核心原因
range(len(prices))生成的迭代序列是固定的:初始列表长度为37,所以循环会固定遍历i从0到36,不会随着列表后续长度变化自动更新- 循环体内手动执行
i -= 1完全不生效:Python的for循环每次迭代都会从range序列里取下一个值,你在循环内修改i的值不会改变下一次迭代取出的i数值 - 当你不断pop元素让列表长度缩短到25时,列表最大有效索引只有24,但循环还是会继续取i=25访问元素,自然触发索引越界错误
推荐正确写法
写法1:列表推导式(最推荐,简洁高效)
直接生成符合要求的新列表,是Python中过滤列表的标准写法:
prices = [item for item in prices if item.text != "PayLivery"]
如果有其他变量引用了原prices列表需要同步更新,就用下面的原地修改写法。
写法2:倒序遍历原地删除
倒着从最后一个索引往前遍历,删除元素不会影响还没遍历到的前序索引,不会出现越界问题:
for i in range(len(prices) - 1, -1, -1): if prices[i].text == "PayLivery": prices.pop(i)
内容的提问来源于stack exchange,提问作者banana lord
相关产品推荐
相关产品推荐

