Объяснение ошибки IndexError в Python: индекс списка выходит за пределы допустимого диапазона
В этом руководстве вы узнаете все о ошибке выхода за пределы списка в Python, включая то, что это такое, почему она возникает и как ее исправить.
IndexError
- одна из самых распространенных ошибок времени выполнения в Python, с которыми вы столкнетесь в своем программировании. По большей части эти ошибки довольно легко исправить, как только вы поймете, почему они возникают.
В этом руководстве вы узнаете, почему возникает ошибка, и рассмотрите некоторые сценарии, в которых вы можете с ней столкнуться. Вы также узнаете, как устранить ошибку в этих сценариях
Оглавление
Что такое индексная ошибка Python?
Давайте уделим немного времени исследованию ошибки IndexError
в Python и посмотрим, как она выглядит. Когда вы столкнетесь с этой ошибкой, вы увидите следующее сообщение об ошибке:
Мы можем немного разобрать текст. Мы видим здесь, что сообщение сообщает нам, что индекс вне диапазона. Это означает, что мы пытаемся получить доступ к элементу списка в Python, который находится вне диапазона, что значит, что элемент не имеет позиции индекса.
Элемента, у которого нет индексной позиции в списке Python, попросту не существует.
В Python, как и во многих других языках программирования, индекс списка начинается с позиции 0
и продолжается до n-1
, где n — это длина списка (или количество элементов в этом списке).
Это вызывает довольно распространенную ошибку. Предположим, мы работаем со списком из 4 элементов. Если мы захотим получить доступ к четвертому элементу, вы можете попробовать использовать индекс 4. Однако это вызовет ошибку. Это потому, что четвертый элемент на самом деле имеет индекс 3.
Давайте посмотрим на пример списка и попробуем получить доступ к элементу, который не существует:
Можно заметить, что ошибка индексации возникает на последнем элементе, к которому мы пытаемся получить доступ.
Самое простое решение - просто не пытаться получить доступ к несуществующему элементу. Но это легче сказать, чем сделать. Как предотвратить возникновение IndexError
? В следующих двух разделах вы узнаете, как предотвратить эту ошибку в наиболее распространенных ситуациях: циклах for в Python и циклах while в Python.
Хотите проверить, существует ли ключ в словаре Python? Ознакомьтесь с этим руководством, которое обучает пяти различным способам проверки существования ключа в словаре Python, включая возврат значения по умолчанию.
Индексная ошибка Python с циклом For
Вы можете столкнуться с ошибкой IndexError
в Python при выполнении цикла for. Это особенно часто происходит, когда вы пытаетесь проитерировать список, используя range()
Давайте рассмотрим ситуацию, в которой возникает эта ошибка:
Способ исправить эту ошибку заключается в том, чтобы прекратить итерацию до того, как список исчерпает свои элементы. Для этого изменим наш цикл for, чтобы он проходил до длины списка, а не до длины + 1. Это позволит нам прекратить итерацию по индексам списка до достижения значения длины.
Это решает проблему IndexError
, поскольку приводит к остановке итерации списка на позиции length - 1
, так как наш индекс начинается с 0, а не с 1.
Давайте посмотрим, как мы можем изменить код, чтобы он работал правильно:
Теперь, когда вы поняли, как устранить ошибку IndexError
в цикле for на Python, давайте посмотрим, как можно устранить эту ошибку в цикле while.
Ошибка индекса Python с циклом while
Вы также можете столкнуться с ошибкой IndexError
в Python при выполнении цикла
Например, может возникнуть соблазн использовать цикл while для прохода по каждому индексу списка. Вы можете, например, написать программу, которая выглядит следующим образом:
Причина, по которой эта программа не работает, заключается в том, что мы проходим по списку на один раз больше, чем нужно. Это происходит потому, что мы используем <=
(знак "меньше или равно"). Поскольку индексы списков в Python начинаются с 0, их максимальный индекс равен количеству элементов в списке минус 1.
Мы можем решить эту проблему, просто изменив оператор на символ "меньше", <
. Это предотвратит выход индекса за пределы диапазона в цикле.
В следующем разделе вы узнаете лучший способ перебора списка в Python, чтобы предотвратить ошибку IndexError
.
Хотите узнать больше о f-строках в Python? Ознакомьтесь с моим подробным руководством, которое включает пошаговое видео для освоения f-строк в Python!
Как исправить ошибку индексирования Python
Есть два простых способа обойтись без ошибки IndexError
при итерации по списку в Python.
Первый способ — очень простой способ перебора списка. Нам не обязательно нужен индекс для итерации по списку. Мы можем просто получать доступ к его элементам напрямую.
Это напрямую предотвращает выход Python за пределы максимального индекса.
Хотите узнать, как использовать функцию Python zip()
для перебора двух списков? Этот урок расскажет вам, что именно делает функция zip()
и покажет несколько творческих способов её использования.
Но что, если вам нужно получить доступ к индексу списка?
Если вам нужно получить доступ к индексу списка и элементу списка, то гораздо более безопасной альтернативой является использование функции Python enumerate()
При передаче списка в функцию enumerate()
возвращается объект enumerate. Это позволяет получить как индекс, так и элемент для каждого элемента списка. Функция неявно останавливается на максимальном индексе, но позволяет получить достаточно много информации.
Давайте посмотрим, как мы можем использовать функцию enumerate()
, чтобы предотвратить ошибку IndexError
в Python.
Здесь видно, что цикл останавливается до того, как индекс выходит за пределы диапазона, тем самым предотвращая ошибку Python IndexError
.
Заключение
В этом уроке вы узнали, как понять ошибку Python IndexError
: list item out of range. Вы узнали, почему возникает эта ошибка, включая некоторые общие сценарии, такие как циклы for и while. Вы также узнали более правильные способы итерации по списку Python, например, итерацию по элементам неявно, а также использование функции Python enumerate()
Чтобы узнать больше о Python IndexError
, ознакомьтесь с официальной документацией здесь
Last updated