У меня проблемы с выяснением, почему я получил этот индекс вне диапазона ошибки - PullRequest
0 голосов
/ 13 ноября 2018

мне дали этот код

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 голосов
/ 13 ноября 2018

Вы можете решить проблему, добавив элементы, которые не кратны 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)
0 голосов
/ 13 ноября 2018

Вы не можете сделать это. Если вы изменяете размер списка в цикле for и изменяете его длину, вы не получите желаемого результата.

Скажем, вы можете удалить один элемент здесь в вашем списке размером size. Так что внезапно lista[size-1] не работает, но вы все равно попытаетесь получить к нему доступ.

Это твоя ошибка. диапазон определяется в начале вызова, он не обновляется после каждой итерации.

Как сказали mauve и Asier Ricardo Rafales Vila, решение - lista = [i for i in range(30) if i%3 != 0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...