微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python:迭代弹出元素时列出索引超出范围错误

如何解决python:迭代弹出元素时列出索引超出范围错误

您在l遍历列表时减少了列表的长度,因此当您接近range语句中索引的末尾时,其中一些索引不再有效。

看起来 像你想要做的是:

l = [x for x in l if x != 0]

它将返回l没有任何零元素的副本(顺便说一下,该操作称为列表理解)。您甚至可以将最后一部分缩短为正义if x,因为非零数字的计算结果为True

i < len(l)用编写代码的方式,没有像这样的循环终止条件,因为它len(l)是在循环之前 预先 计算的,不会在每次迭代时重新评估。您可以 用以下方式编写它:

i = 0
while i < len(l):
   if l[i] == 0:
       l.pop(i)
   else:
       i += 1

解决方法

我写了一个简单的python程序

l=[1,2,3,1]
for i in range(0,len(l)):
       if l[i]==0:
           l.pop(i)

这给我在线上出现错误“列表索引超出范围” if l[i]==0:

调试后,我可以确定它i正在增加,列表正在减少。
但是,我有循环终止条件i < len(l)。那为什么我会收到这样的错误?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。