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