关于(python)列表索引超出范围:(python)列表索引超出范围-迭代

(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"(索引错误:列表索引超出范围)为什么会发生这种情况?


您正在修改正在迭代的列表。如果这样做,列表的大小就会缩小,因此最终lst[i]将指向列表的边界之外。

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]

在迭代过程中,不应该从list中删除cx1(1)项;这会更改所有后续项的索引,因此会更改IndexError。你可以尝试一个简单的列表理解:

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


问题是您删除了列表中减小其大小的项。您需要做的是用要删除的索引创建一个数组,然后向后删除它们。

另一种方法是创建一个临时列表,添加不想删除的元素,然后用包含所有要保留元素的列表覆盖初始列表。