Список: создание, индексы и срезы
Уроки курсаСписок: создание, индексы и срезы
IndexError: выход за пределы допустимых индексов
Индексы работают только в пределах списка. Для списка из n элементов допустимый диапазон — от 0 до n-1 для положительных индексов и от -n до -1 для отрицательных. Как только выходишь за эту границу, Python бросает IndexError: list index out of range.
Вот как это выглядит:
colours = ['красный', 'зелёный', 'синий'] # 3 элемента, индексы 0..2 и -3..-1
print(colours[3]) # IndexError: list index out of range
print(colours[-4]) # IndexError: list index out of range
Ошибка возникает в момент обращения — Python даже не пытается вернуть значение, сразу останавливает выполнение.
Чаще всего IndexError появляется в двух ситуациях.
Первая — классическая ошибка на единицу: человек думает «список из трёх элементов, значит последний на позиции 3», но последний на позиции 2. Нумерация начинается с нуля, поэтому последний элемент всегда n-1, а не n.
Вторая — обращение к элементу пустого списка:
empty = []
print(empty[0]) # IndexError: list index out of range
У пустого списка вообще нет допустимых индексов, любое обращение по индексу упадёт.
Как проверить, что индекс в пределах? Самый прямолинейный способ — сравнить с длиной списка перед обращением:
colours = ['красный', 'зелёный', 'синий']
i = 3
if i < len(colours):
print(colours[i])
else:
print('Индекс за пределами списка')
Здесь len(colours) возвращает 3, и условие 3 < 3 — ложное, поэтому обращения к несуществующему элементу не происходит.
Есть и отдельная точка внимания для отрицательных индексов: граница с другой стороны. Для списка из n элементов минимальный допустимый отрицательный индекс — -n. Всё, что меньше (например, -4 для трёхэлементного списка), тоже даёт IndexError.
Если видишь эту ошибку в коде — первым делом смотри на длину списка в момент обращения и на то, какой именно индекс использован. Чаще всего причина там.
