← Все вопросы
IndexError: list index out of range — что значит и как избежать?
9
Обращаюсь к элементу списка, а получаю IndexError: list index out of range. Список вроде не пустой. Почему индекс «вне диапазона» и как правильно обходить элементы, чтобы не вылетало?
2 ответа
12
✓ Принятый ответ — помог автору
IndexError: list index out of range значит: вы просите элемент по номеру, которого в списке нет. В Python индексы идут с 0, поэтому у списка из 3 элементов допустимы только индексы 0, 1, 2 — а lst[3] уже выходит за границу.
lst = [10, 20, 30]
print(lst[3]) # IndexError — последний индекс это 2
Частые причины:
- Путаница «длина против последнего индекса». Длина 3, но последний индекс 2. Правильно:
lst[len(lst) - 1]или простоlst[-1]. - Цикл
range(len(lst)+1)— лишняя итерация выходит за край. - Обращение к пустому списку:
lst[0]приlst = [].
Как избежать:
- Перебирайте элементы напрямую, без индексов:
for x in lst:
print(x)
- Проверяйте длину перед доступом:
if len(lst) > i:
print(lst[i])
- Последний элемент берите через
lst[-1].
То же касается строк и кортежей: "abc"[3] тоже даст IndexError.
5
Часто ошибка вылезает в цикле while i <= len(lst):. Здесь <= лишний: когда i == len(lst), элемента уже нет. Замените на while i < len(lst):. Этот сдвиг на единицу (ошибка «забора» / off-by-one) — причина большинства IndexError.
Ваш ответ
Войдите, чтобы ответить на вопрос.