@dmitriyuvin
FullStack developer ( Laravel & Vue )

Почему ошибка Index out of range?

txt_26 = open("26.txt", "r", encoding="cp1251")
content = txt_26.read()
txt_26.close()

sentences = list(content.split("."))
length = len(sentences)

# print(length)

for i in range(length):
    if sentences[i] == r"":  # тут ошибка
        print(sentences[i], " - ", i) # выводит так как надо
        del sentences[i] # из-за этой команды ошибка

Если элемент пустой, удаляем его.
Пробовал также вот так: sentences.pop(i)
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
0xD34F
@0xD34F
Потому что обходите список от начала к концу и одновременно удаляете из него элементы. В какой-то момент текущий индекс сравняется с количеством оставшихся элементов. Ну и всё.

Обходите список от конца к началу (типа, range(length - 1, -1, -1)), а ещё лучше вообще не модифицируйте список, а создавайте новый:

sentences = [ n for n in sentences if n ]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@o5a
Потому что индекс в цикле не меняется (он все равно идет до последнего элемента, в данном случае length), но сам список сдвигается при удалении из него элементов (так что элемент i+1 становится элементом i). Так делать не рекомендуется, как раз во избежание подобных ошибок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы