Ошибка IndexError: list index out of range в Python означает, что ты обратился к элементу списка по индексу, которого не существует. Чаще всего причина — путаница с нумерацией: индексы начинаются с нуля, поэтому последний элемент стоит под номером на единицу меньше длины. Разберём, как это исправить и не наступать на те же грабли снова.
Коротко
В списке из n элементов индексы идут от 0 до n - 1. Последний элемент — это data[len(data) - 1] или просто data[-1], а не data[len(data)]. Обращение к data[n] и выше даёт IndexError.
numbers = [10, 20, 30]
print(numbers[5])Ошибка выполнения — main.py, строка 2
IndexError: list index out of range
Почему возникает ошибка
В списке [10, 20, 30] три элемента, но их индексы — 0, 1 и 2. Обращение numbers[5] запрашивает шестую ячейку: индексы 3, 4 и 5 уже находятся за границей списка. Отсюда и list index out of range — «индекс за пределами списка».
В списке numbers = [10, 20, 30] три элемента, поэтому допустимые индексы — от 0 до 2. Обращение к несуществующему индексу выходит за границы списка и вызывает ошибку:
print(numbers[5])
# IndexError: list index out of rangePython не возвращает пустое значение за границей списка — он останавливает программу с ошибкой IndexError. Поэтому индекс всегда должен быть в пределах длины списка.
Как исправить
numbers = [10, 20, 30]
print(numbers[-1]) # последний элемент — надёжно
print(numbers[len(numbers) - 1]) # то же самое через длину30 30
Для последнего элемента используй отрицательный индекс numbers[-1] — он всегда указывает на конец, независимо от длины. Если индекс приходит извне (из ввода или расчёта) и может выйти за границы, проверь его через len() или заранее убедись, что список не пуст. Про индексы и срезы списков — в гайде Списки в Python: создание, методы и срезы.
Где ошибка встретится снова
Две частые ситуации. Первая — цикл с range(len(data) + 1): лишняя + 1 уводит индекс за границу на последнем шаге. Обычно индекс вообще не нужен — for item in data перебирает без риска выйти за пределы. Вторая — обращение к data[0] у пустого списка: элементов нет, поэтому даже нулевой индекс даёт IndexError. Про безопасный перебор — в гайде Циклы в Python: for, while, break и continue.
Короткие ответы на вопросы
Что значит list index out of range?
Это значит, что ты обратился к индексу, которого в списке нет. В списке из n элементов допустимы индексы 0…n − 1; обращение к n и больше выходит за границы.
Как получить последний элемент списка?
Через data[-1] — отрицательный индекс указывает на конец. Это надёжнее, чем считать data[len(data) - 1], и не даёт ошибиться на единицу.
Почему IndexError возникает на пустом списке?
В пустом списке нет ни одного элемента, поэтому любой индекс, включая 0, выходит за границы. Перед обращением проверь, что список не пуст: if data:.
Кот-наставник— Запомни: индексы начинаются с нуля, поэтому последний элемент — это
len - 1, а неlen. Хочешь последний — бери[-1], не ошибёшься.— А если просто перебираешь список — забудь про индексы вовсе.
for item in dataне выйдет за границы никогда.
Индексы списков — на практике
На SkillPy ты работаешь со списками сам, а AI-наставник ловит выход за границы и показывает, где индекс превысил длину. Он понимает твой код, а не сверяет с шаблоном.
