Как решить Python Indexerror: список индексов вне допустимого диапазона?

IndexError: «индекс списка вне диапазона» — это ошибка Python, возникающая при попытке доступа к элементу списка за пределами диапазона списка. В Python индексы списков используются для доступа или выполнения действий над элементами списка. Например, вы можете распечатать их или пройтись по ним с помощью циклов.

Ошибка индекса: индекс списка вне допустимого диапазонаОшибка индекса: индекс списка вне допустимого диапазона

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Проще говоря, если в списке 5 элементов, и вы пытаетесь использовать 10-й элемент в списке в Python, он вернет IndexError: индекс списка вне допустимого диапазона. Обычно эти ошибки легко устраняются, но требуют небольшой отладки кода.

Создание списков в Python.

В Python список создается

  1. Присвоение имени списку
  2. Пробел, за которым следует оператор присваивания, т. е. =.
  3. Пробел, за которым следует открывающая квадратная скобка.
  4. Добавьте первый элемент списка в двойные кавычки (без кавычек).
  5. Запятая и пробел должны следовать за вторым элементом списка в двойных кавычках. Затем вы можете продолжить с другими элементами списка. В конце списка введите закрывающую квадратную скобку.

Например, чтобы создать и распечатать список языков в Python:

языки = [“Python”, “Java”, “JavaScript”]
печать (языки)Создайте и распечатайте список языков в PythonСоздайте и распечатайте список языков в Python

Приведенный выше код создаст список с названием языков и содержит три записи. Первый Python, второй Java и третий JavaScript.

Проверьте длину списка Python

Чтобы проверить длину списка языков, воспользуемся функцией length. Для этого введите следующий код:

языки = [“Python”, “Java”, “JavaScript”]

languages_length = len(языки) print(languages_length)

Это вернет значение 3.

Используйте команду «Длина», чтобы найти длину списка и распечатать его.Используйте команду «Длина», чтобы найти длину списка и распечатать его.

Индексирование в списках Python

В списке Python к каждому элементу можно получить доступ по его порядковому номеру. Python, как и другие современные языки, является языком с нулевым индексом, т. е. он начинает отсчет с нуля (а не с 1). Таким образом, список из трех элементов будет иметь индекс 0, 1 и 2.

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

языки = [“Python”, “Java”, “JavaScript”]

печать(языки[0]) # Это вернет Python print(языки[1]) # Это вернет Java print(языки[2]) # # Это вернет JavaScriptПечать значения в списке языков с использованием их порядкового номераПечать значения в списке языков с использованием их порядкового номера

Диапазон индексов в списке Python

Таким образом, можно легко сказать, что диапазон индексов списка в Python будет от 0 до n-1, где n — общее количество элементов в списке. В приведенном выше примере диапазон индекса будет от 0 до 2 (3-1).

Отрицательное индексирование в списке Python

Вы также можете использовать отрицательную индексацию для доступа к элементу списка Python. Последний элемент будет иметь индекс -1, предпоследний будет иметь индекс -2 и так далее. Например

языки = [“Python”, “Java”, “JavaScript”]

языки[-1] # это вернет последний элемент, который является языками JavaScript[-2] # это вернет 2-й последний элемент, который является языками Java[-3] # это вернет третий последний элемент, который является PythonРаспечатайте значения списка языков, используя их отрицательный индексРаспечатайте значения списка языков, используя их отрицательный индекс

Диапазон индекса в отрицательной индексации

При отрицательной индексации списка Python диапазон индексов будет от -1 до -n, где n — это общее количество значений, присутствующих в списке. В нашем списке языков диапазон отрицательного индекса будет от -1 до -3, поскольку длина нашего списка равна 3.

Ошибка индекса: индекс списка вне допустимого диапазона

Обычно новички в мире Python сталкиваются с ошибкой Indexerror, когда в своем коде они начинают индексацию с 1, а не с нуля. Поясним это на примере. Посмотрите на список языков ниже:

языки = [‘Python’, ‘Java’, ‘JavaScript’]

Он имеет 3 языка: первый Python, второй Java и третий JavaScript. Попробуем напечатать 3-й язык в списке:

печать(языки[3])IndexError при печати значения индекса 3 списка языковIndexError при печати значения индекса 3 списка языков

Но это вызовет ошибку Indexerror. Но почему? Здесь диапазон индексов нашего списка равен 3, и мы пытаемся напечатать 3-й язык в списке. Однако в нашем коде мы просим Python напечатать 4-й язык, который отсутствует и находится вне диапазона индекса списка. Как?

Индекс 0 = Индекс Python 1 = Индекс Java 2 = JavaScript

Четвертого значения нет, поэтому Python выдает Indexerror. Здесь правильный код будет

языки = [‘Python’, ‘Java’, ‘JavaScript’]

печать(языки[2])Распечатайте значение индекса 2 из списка языковРаспечатайте значение индекса 2 из списка языков

IndexError в отрицательном индексировании

Если мы попытаемся напечатать -4-й язык в нашем списке языков, мы получим IndexError.

языки = [‘Python’, ‘Java’, ‘JavaScript’]

печать(языки[-4])8. IndexError при печати -4-го значения индекса списка языковIndexError при печати -4-го значения индекса списка языков

Это вызовет ошибку индекса, потому что наш диапазон индексов от -1 до -3, поэтому нет -4-го значения. Здесь правильный код будет

языки = [‘Python’, ‘Java’, ‘JavaScript’]

печать(языки[-3]) # который покажет Python.Печать значения -3-го индекса списка языковПечать значения -3-го индекса списка языков

IndexError в циклах Python

Циклы в Python, как и в любом другом языке программирования, продолжают работать до тех пор, пока не будет выполнено определенное условие. Цикл в Python вызовет IndexError, если условие, определяющее цикл, включает список, но это условие недействительно в соответствии со списком.

IndexError в цикле while

Посмотрите на приведенный ниже код цикла While в Python:

языки = [‘Python’, ‘Java’, ‘JavaScript’]

i = 0, а i <= len(языки): print(языки[i]) я += 1IndexError в цикле while PythonIndexError в цикле while Python

Здесь мы просим Python составить список языков, а затем объявить переменную i с начальным значением 0. Затем мы объявляем наш цикл while и просим код выполняться до тех пор, пока переменная i не станет меньше или равна длине list, т.е. 3. Но это выдает IndexError. Почему?

Наш список здесь имеет диапазон индексов от 0 до 2 (3-1).

Индекс 0 = Индекс Python 1 = Индекс Java 2 = JavaScript

Но в индексе 3 ничего нет. Но наш код просит компилятор Python продолжать работу до тех пор, пока переменная i не станет равной 3, что невозможно, отсюда и ошибка вне диапазона.

Итак, давайте изменим наш код, чтобы цикл while выполнялся до тех пор, пока диапазон не будет равен 2, а не 3.

языки = [‘Python’, ‘Java’, ‘JavaScript’]

i = 0, а i < len(языки): print(языки[i]) я += 1

Итак, мы удалили равную часть и использовали условие для запуска до тех пор, пока переменная i не станет меньше 3. Этот цикл остановится после 2, и поэтому цикл будет выполняться без каких-либо проблем.

Настройка цикла while для выполнения до тех пор, пока переменная i не станет меньше, чем длина списка языковНастройка цикла while для выполнения до тех пор, пока переменная i не станет меньше, чем длина списка языков

IndexError в функции диапазона цикла for

Функция range() в цикле for Python принимает одно целое число, для которого подсчет останавливается. Счет в функции Range начинается с позиции 0, затем увеличивается на 1 после каждой итерации, и число, на котором счет остановится, но это число не включается.

Учебная форма синтаксиса функции Range() будет следующей:

диапазон (старт, стоп, шаг).

Начало: необязательное целочисленное значение, указывающее начало серии. Его значение по умолчанию равно нулю, если оно оставлено пустым.

Стоп: обязательное целочисленное значение, указывающее точку, в которой должно закончиться выполнение функции диапазона. Эти значения сами по себе не включаются в выполнение.

Шаг: это необязательное значение, которое используется для увеличения приращения после каждой итерации. Если оставить пустым, его значение по умолчанию равно единице.

Но обычно он используется как:

диапазон (стоп)

Например, диапазон (4) указывает, что цикл For будет начинаться с 0 и заканчиваться, когда счетчик достигнет 4, т. е. цикл остановится после 3.

Давайте продолжим наш пример с языками, введите следующий код:

языки = [“python”, “Java”, “JavaScript”]

для имени в диапазоне (4): печать (языки[name])IndexError в функции диапазона цикла forIndexError в функции диапазона цикла for

Это снова вызовет ошибку индекса, потому что функция диапазона будет продолжать работать до тех пор, пока не будет выполнен диапазон индекса 3 и счетчик не достигнет 4. Здесь мы просим интерпретатор напечатать значения с индексом 0, 1, 2 и 3. Но диапазон индекса равен 3.

Индекс 0 = Индекс Python 1 = Индекс Java 2 = JavaScript

Итак, в индексе 3 нечего выполнять, отсюда и ошибка. Мы можем исправить это, изменив наш код следующим образом:

языки = [“python”, “Java”, “JavaScript”]

для имени в диапазоне (3): печать (языки[name])Используйте функцию диапазона для печати всех значений в диапазонеИспользуйте функцию диапазона для печати всех значений в диапазоне

Другой способ исправить это — использовать функцию длины внутри функции диапазона.

языки = [“python”, “Java”, “JavaScript”]

для имени в диапазоне (len (языки)): print (языки[name])Используйте команду длины в функции диапазона цикла forИспользуйте команду длины в функции диапазона цикла for

Здесь мы проинструктировали интерпретатор остановить подсчет, когда длина списка языков (т. е. 3) достигнута, но не включена. Таким образом, интерпретатор останавливается после выполнения диапазона индекса 2, что является допустимой записью.

Но если вы передадите аргумент +1 в функцию длины, то это снова вызовет ошибку индекса. Посмотрите на код ниже:

языки = [“python”, “Java”, “JavaScript”]

для имени в диапазоне (len (языки) = 1): печать (языки[name])Добавление плюс один к длине списка вызывает IndexErrorДобавление плюс один к длине списка вызывает IndexError

Здесь снова число счетчиков функции диапазона достигает четырех (длина списка языков 3+1=4), чего нет, отсюда и ошибка.

IndexError из-за измененного списка при повторении

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

Дж = [1, 2, 4, 0, 0, 1]

для i в диапазоне (0, len (J)): если J[i]==0: J.pop(i)

Здесь J.pop(i) удаляет нули из списка и уменьшает размер списка, а на следующей итерации диапазон индексов списка уменьшается до 4, но код ищет len(J)-1 = 6-1 = 5 которого нет, отсюда и ошибка.

IndexError в измененном списке после итерацииIndexError в измененном списке после итерации

Вы можете исправить это, используя сжатие списка, и следующий код сделает свое дело.

Дж = [1,2,3,0,0,1]

Дж = [x for x in J if x != 0]

печать (Дж)Используйте сжатие списка для очистки IndexErrorИспользуйте сжатие списка для очистки IndexError

Второй список сжимает исходный список после удаления нулей. Другой формой этого кода может быть:

Дж = [1, 2, 4, 0, 0, 1]

для i в диапазоне (len (J) -1, -1, -1): если J[i] == 0: J.pop(i) print(J)Уменьшайте диапазон цикла после каждой итерации, чтобы решить IndexErrorУменьшайте диапазон цикла после каждой итерации, чтобы решить IndexError

Вот второй пример:

цвета = [‘blue’, ‘red’, ‘orange’, ‘blue’, ‘green’]

для i в диапазоне (len (цвета)): если цвета[i] == ‘синий’: цвета del[i]

печать (цвета)IndexError в списке цветов при удалении синегоIndexError в списке цветов при удалении синего

Мы пытаемся удалить синий цвет из списка цветов, а затем распечатать список, но он выдает ошибку индекса. Это происходит из-за того, что команда del изменяет длину списка в цикле.

В начале цикла длина списка цветов равна 5, поэтому функция range() генерирует индекс списка как [0, 1, 2, 3, 4]. С каждой итерацией кода длина списка уменьшается, но индекс, сгенерированный циклом, остается равным 5, и в конце концов мы столкнемся с ошибкой индекса.

Эту проблему можно решить, используя сжатие списка.

цвета = [‘blue’, ‘red’, ‘orange’, ‘blue’, ‘green’]

цвета = [color for color in colors if color != ‘blue’]

печать (цвета)Используйте сжатие списка для очистки IndexErrorИспользуйте сжатие списка для очистки IndexError

Другой формой этого кода может быть:

цвета = [‘blue’, ‘red’, ‘orange’, ‘blue’, ‘green’]

для i в диапазоне (len (цвета) -1, -1, -1): если цвета[i] == ‘синий’: цвета del[i]

печать (цвета)Уменьшайте диапазон индексов с каждой итерацией, чтобы очистить IndexError в спискеУменьшайте диапазон индексов с каждой итерацией, чтобы очистить IndexError в списке

Пустые списки

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

языки = []

печать(языки[0])IndexError из-за пустого спискаIndexError из-за пустого списка

Это вызовет ошибку индекса, так как список пуст и в индексе 0 нет значения. Вы можете покрыть это, используя IF. Код будет таким:

языки = []

если языки == []: print(‘Пустой список’) else: print(языки[0])Используйте оператор IF, чтобы проверить, пуст ли списокИспользуйте оператор IF, чтобы проверить, пуст ли список

IndexError в строке Python

Эта ошибка также может возникать со строками Python. Давайте проясним это, используя пример.

s=”Python” печать(и[6])IndexError в строке PythonIndexError в строке Python

Это вызовет ошибку indexerror. В этом примере мы пытаемся напечатать 6-й символ в строке, но инструктируем интерпретатор напечатать 7-й символ, которого нет. Как? Наш 6-й символ будет проиндексирован как 5 (считайте от 0 до 5). Итак, код должен быть

s=”Python” печать(и[5])Напечатайте 5-й символ строкиНапечатайте 5-й символ строки

IndexError в кортеже Python

Ошибка IndexError также может возникнуть в кортеже Python. Давайте посмотрим на следующий пример:

s = (‘Азия’, ‘Европа’) print(s[2])IndexError в кортеже PythonIndexError в кортеже Python

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

s = (‘Азия’, ‘Европа’) print(s[1])Распечатайте второе значение кортежа PythonРаспечатайте второе значение кортежа Python

Проверьте наличие ошибки в библиотеке или IDE

Если ваш код на 100 % правильный, но вы по-прежнему сталкиваетесь с ошибкой индекса, проблема может заключаться в ошибке в библиотеке Python или IDE. В недавнем прошлом сообщалось, что Manim выдает ошибку indexerror даже в своих тестовых примерах. В таком случае либо проверьте свой код на другом компьютере, либо используйте онлайн-компилятор Python для тестирования.

Причины ошибки IndexError: индекс списка вне допустимого диапазона

Итак, вкратце, мы можем сказать, что ошибка Indexerror: List Index out of Range в основном возникает, когда:

  1. Вы пытаетесь получить доступ к индексу, которого нет в списке.
  2. Вы используете недопустимые индексы в своих циклах.
  3. Когда вы указываете диапазон, который находится за пределами диапазона индекса списка при использовании функции range().
  4. Ошибка библиотеки или IDE.

Способ решения ошибки IndexError

Мы довольно подробно обсудили этот вопрос, но это все примеры кодов, и вам нужно покопаться в своем коде, чтобы устранить ошибку. Лучший способ — записать строку, в которой вы столкнулись с ошибкой, и непосредственно перед этим добавить команду печати. Таким образом, вы легко сможете записать проблему.

Итак, читатели, если вы все еще не уверены в IndexError, добро пожаловать в раздел комментариев.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *