python:列表赋值索引超出范围

l--*_*''' 1 python

  for row in c:
    for i in range(len(row)):
      if i not in keep:
        del row[i]
Run Code Online (Sandbox Code Playgroud)

我在最后一行收到此错误:

IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)

如果它存在,我不明白它是如何超出范围的!请帮忙

Mic*_*son 9

如果row是列表,那么不要忘记删除列表中的元素会将所有后续元素移回一个地方以填补空白,因此列表中的所有后续索引都将是一个一个(并且每次都是你删除另一个元素,每个索引中的错误增加一个).有几种方法可以避免这个问题 - 给一个,尝试向后遍历列表.

要响应如何向后迭代,您可以尝试使用可以传递到范围的额外参数.前两个参数给出了迭代范围(下限是包含的,上限是独占的),第三个参数是步骤:

>>> range(5)
[0, 1, 2, 3, 4]
>>> range(0, 5)
[0, 1, 2, 3, 4]
>>> range(3, 5)
[3, 4]
>>> range(3, 5, -1)
[]
>>> range(5, 3, -1)
[5, 4]
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,似乎你想要:

range(len(row) - 1, -1, -1)
Run Code Online (Sandbox Code Playgroud)

或者更容易阅读(感谢viraptor):

reversed(range(len(row))
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试使用列表推导(我假设c是一个列表):

for row_number, row in enumerate(c):
    c[row_number] = [x for i, x in enumerate(row) if i in keep]
Run Code Online (Sandbox Code Playgroud)

  • for i in reverse(range(...)): (2认同)