我很难找出为什么使该索引超出范围错误

时间:2018-11-13 15:35:22

标签: python loops indexing error-handling

我收到了此代码

lista = list(range(30))
print(lista)
for i in range(0,len(lista)):
    if lista[i]%3 == 0:
        del lista[i]

print(lista)

如果出现错误,告诉我它超出了我的列表范围。但是,如果for循环在此列表的长度范围内,则每个i的列表索引都超出范围是没有意义的,因为它只能获取列表长度的值个数?

2 个答案:

答案 0 :(得分:1)

您不能这样做。如果要在for循环中修改列表的大小并修改其长度,将无法获得所需的结果。

说,您可以在大小size的列表中删除一个元素。因此,突然lista[size-1]无效,但是您仍然要尝试访问它。

那是你的错误。范围是在调用开始时定义的,不会在每次迭代后更新。

正如淡紫色和Asier ricardo Rafales Vila所说,解决方案是lista = [i for i in range(30) if i%3 != 0]

答案 1 :(得分:0)

您可以通过将不是3的倍数的元素添加到新列表中来解决问题 例如:

lista = list(range(30))
print(lista)
new_lst = []
for i in range(0,len(lista)):
    if lista[i]%3 != 0:
        new_lst.append(lista[i])

print(new_lst)