for row in c:
for i in range(len(row)):
if i not in keep:
del row[i]
我在最后一行收到这个错误:
IndexError: list assignment index out of range
我不明白如果它存在,它怎么会超出范围!请帮忙
请您参考如下方法:
如果 row 是一个列表,那么不要忘记删除列表的一个元素会将所有后续元素移回一个位置以填补空白,因此所有后面的索引都会进入列表将相差一(并且每次删除另一个元素时,每个索引中的错误都会增加一个)。有几种方法可以避免这个问题——举一个例子,尝试向后遍历列表。
要响应如何向后迭代,您可以尝试使用可以传递给 range 的额外参数.前两个参数给出了迭代的范围(包含下限,不包含上限),第三个参数是步骤:
>>> 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]
因此,在您的情况下,您似乎想要:
range(len(row) - 1, -1, -1)
或者更容易阅读(感谢 viraptor):
reversed(range(len(row))
或者,您可以尝试使用列表理解(我假设 c 是一个列表):
for row_number, row in enumerate(c):
c[row_number] = [x for i, x in enumerate(row) if i in keep]
