Ошибки индексирования при работе со списками

We use cookies. Read the Privacy and Cookie Policy

Когда программист только начинает работать со списками, он часто допускает одну характерную ошибку. Допустим, имеется список с тремя элементами, и программа запрашивает четвертый элемент:

motorcycles = ['honda', 'yamaha', 'suzuki']

print(motorcycles[3])

В этом случае происходит ошибка индексирования:

Traceback (most recent call last):

File "motorcycles.py", line 3, in <module>

. .print(motorcycles[3])

IndexError: list index out of range

Python пытается вернуть элемент с индексом 3. Однако при поиске по списку ни один элемент motorcycles не обладает индексом 3. Из-за смещения индексов на 1 эта ошибка весьма распространена. Люди думают, что третьим элементом является элемент с индексом 3, потому что они начинают отсчет с 1. Но для Python третьим является элемент с индексом 2, потому что индексирование начинается с 0.

Ошибка индексирования означает, что Python не может понять, какой индекс запрашивается в программе. Если в вашей программе происходит ошибка индексирования, попробуйте уменьшить запрашиваемый индекс на 1. Затем снова запустите программу и проверьте правильность результатов.

Помните, что для обращения к последнему элементу в списке используется ­индекс –1. Этот способ работает всегда, даже если размер списка изменился с ­момента последнего обращения к нему:

motorcycles = ['honda', 'yamaha', 'suzuki']

print(motorcycles[-1])

Индекс –1 всегда возвращает последний элемент списка, в данном случае значение 'suzuki':

'suzuki'

Этот синтаксис порождает ошибку только в одном случае — при попытке получить последний элемент пустого списка:

motorcycles = []

print(motorcycles[-1])

В списке motorcycles нет ни одного элемента, поэтому Python снова выдает ошибку индексирования:

Traceback (most recent call last):

File "motorcyles.py", line 3, in <module>

. .print(motorcycles[-1])

IndexError: list index out of range

примечание

Если в вашей программе произошла ошибка индексирования и вы не знаете, как с ней справиться, попробуйте вывести список или хотя бы его длину. Возможно, ваш список выглядит совсем не так, как вы думаете, особенно если его содержимое динамически определялось программой. Фактическое состояние списка или точное количество элементов в нем поможет вам выявить логические ошибки такого рода.

Упражнения

3-11. Намеренная ошибка: если ни в одной из предшествующих программ вы еще не сталкивались с ошибками индексирования, попробуйте создать такую ошибку искусственно. Измените индекс в одной из программ, чтобы вызвать ошибку индексирования. Не забудьте исправить ошибку перед тем, как закрыть программу.