(Python)列表索引超出范围 - 迭代

use*_*764 2 python indexing list range out

for i in range(len(lst)):    
   if lst[i][0]==1 or lst[i][1]==1:
        lst.remove(lst[i])
return lst
Run Code Online (Sandbox Code Playgroud)

这给出了"IndexError:list index超出范围"为什么会发生这种情况?

Tim*_*ker 9

你正在修改你正在迭代的列表.如果这样做,列表的大小lst[i]会缩小,因此最终将超出列表的边界.

>>> 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
Run Code Online (Sandbox Code Playgroud)

构建新列表更安全:

return [item for item in lst if item[0]!=1 and item[1]!=1]
Run Code Online (Sandbox Code Playgroud)


jon*_*rpe 7

你不应该remove的物品从list你遍历它; 这改变了所有后续项目的索引,因此IndexError.你可以尝试一个简单的列表理解:

lst = [item for item in lst if (item[0] != 1 and item[1] != 1)]
Run Code Online (Sandbox Code Playgroud)