(Python) List index out of range - iteration
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 | for i in range(len(lst)): if lst[i][0]==1 or lst[i][1]==1: lst.remove(lst[i]) return lst |
这就产生了"indexerror:list index out of range"(索引错误:列表索引超出范围)为什么会发生这种情况?
您正在修改正在迭代的列表。如果这样做,列表的大小就会缩小,因此最终
1 2 3 4 5 6 7 8 9 10 | >>> lst = [1,2,3] >>> lst[2] 3 >>> lst.remove(1) >>> lst[1] 3 >>> lst[2] Traceback (most recent call last): File"<stdin>", line 1, in <module> IndexError: list index out of range |
构建一个新的列表比较安全:
1 | return [item for item in lst if item[0]!=1 and item[1]!=1] |
在迭代过程中,不应该从
1 | lst = [item for item in lst if (item[0] != 1 and item[1] != 1)] |
一般来说,这意味着您提供的是一个不存在列表元素的索引。
例如,如果您的列表是[12,32,50,71],并且您在索引10中请求元素,那么您将完全超出界限并收到一个错误,因为只有元素0到3存在。
通过推导,我得出结论,您的LST如下所示:
lst=[…[val1,val2],[val1,val2],[val1,val2]……]
我想这里发生的事情是你混淆了你的"我在射程内"和"我在射程内"(我也做过很多次)。
出现错误的行是:删除(lst[i])
您可以通过如下方式更改代码来更正此问题:
1 2 3 4 | for i in lst: if i[0] ==1 or i[1] ==1: lst.remove(lst[i]) return lst |
您的代码在列表[i]之前的结构方式没有任何意义,您的i是一个大于lst中两个值项的数字。
= D
问题是您删除了列表中减小其大小的项。您需要做的是用要删除的索引创建一个数组,然后向后删除它们。
另一种方法是创建一个临时列表,添加不想删除的元素,然后用包含所有要保留元素的列表覆盖初始列表。