Перейти к содержимому

List index out of range python ошибка как исправить

  • автор:

Как исправить IndexError: list index out of range?

выдает ошибку
if ‘city’ and ‘country’ in info[‘items’][i]:
IndexError: list index out of range
как исправить?

  • Вопрос задан более года назад
  • 1298 просмотров

Комментировать

Решения вопроса 1

SoreMix

soremix @SoreMix Куратор тега Python

Ограничить цикл числом 28. Потому что при i = 29 условие выполняется, внутри i увеличивается на 1 и получаете элемент с индексом 30, а при условии счета с нуля, это будет 31-й элемент. Хотя у вас всего их 30

Ответ написан более года назад

Почему я получаю ошибку «IndexError: list index out of range» и как ее исправить?

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

Отслеживать
MaxU — stand with Ukraine
задан 2 фев 2022 в 16:21
MaxU — stand with Ukraine MaxU — stand with Ukraine
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака

«Тут то мне карта и попёрла». Хорошая идея собрать типовые вопросы и грамотно разъяснить. 🙂 Есть похожий вопрос про ошибку с не числовым индексом, не знаю вот может имело бы смысл её в этом же вопросе тоже расписать, или нет.

2 фев 2022 в 16:28

@CrazyElf, мне кажется ошибку «list indices must be integers or slices, not str» — лучше описать подобным образом в отдельном вопросе-ответе. Возьметесь? 😉

2 фев 2022 в 16:30

Спасибо, но пока не могу — от работы голова пухнет. Думаю, потом ещё будут подходящие темы. Есть у меня издревле одна задумка по одному вопрос-ответу, надо будет как-нибудь реализовать потом. )

2 фев 2022 в 16:39
сюда хорошо подойдёт метка [python-faq]
2 фев 2022 в 19:38
@Danis, не знал о такой метке. Спасибо — добавил)
2 фев 2022 в 19:51

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Суть этой ошибки очень проста — попытка обратиться к элементу списка/массива с несуществующим индексом.

lst = [1, 2, 3] print(lst[3]) 
----> 2 print(lst[3]) IndexError: list index out of range 

Указанный в примере список имеет три элемента. Индексация в Python начинается с 0 и заканчивается n-1 , где n — число элементов списка (AKA длина списка). Соответственно для списка lst валидными индексами являются: 0 , 1 и 2 .

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

Т.е. если указать отрицательный индекс, значение которого превышает длину списка мы получим всё ту же ошибку:

In [2]: lst[-4] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) in ----> 1 lst[-4] IndexError: list index out of range 

В реальной жизни (коде) эта ошибку чаще всего возникает в следующих ситуациях:

  • если список пустой: lst = []; first = lst[0]
  • в циклах — когда переменная итерирования (по индексам) дополнительно изменяется или когда используются глобальные переменные
  • в циклах при использовании вложенных списков — когда перепутаны индексы строк и столбцов
  • в циклах при использовании вложенных списков — когда размерности вложенных списков неодинаковые и код этого не учитывает. Пример: data = [[1,2,3], [4,5], [6,7,8]] — если попытаться обратиться к элементу с индексом 2 во втором списке ( [4,5] ) мы получим IndexError
  • в циклах — при изменении длины списка в момент итерирования по нему. Классический пример — попытка удаления элементов списка при итерировании по нему.

Поиск и устранения ошибки начинать нужно всегда с того, чтобы внимательно прочитать сообщение об ошибке ( error traceback ).

Пример скрипта ( test.py ), в котором переменная итерирования цикла for изменяется (так делать нельзя):

lst = [1,2,3] res = [] for i in range(len(lst)): i += 1 #  
Traceback (most recent call last): File "test.py", line 6, in res.append(lst[i] ** 2) IndexError: list index out of range 

Обратите внимание что в сообщении об ошибке указан номер ошибочной строки кода - File "test.py", line 6 и сама строка, вызвавшая ошибку: res.append(lst[i] ** 2) . Опять же в реальном коде ошибка часто возникает в функциях, которые вызываются из других функций/модулей/классов. Python покажет в сообщении об ошибке весь стек вызовов - это здорово помогает при отладке кода в больших проектах.

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

Ошибка IndexError: list index out of range

В общем, писал простенький код на питоне по повороту массив и почему-то выдает ошибку "IndexError: list index out of range". Сам код:

#длина и длина поворота
NK = (input().split())
N = int(NK[0])
K = int(NK[1])

#содержание массива
LINE = (input().split())
ROT_LINE = []

#rotate
rotate_num = ()
i = int(0)
number = (0)
while i < N :
rotate_num =(i + K % N)
ROT_LINE.append(LINE[rotate_num])
i = i + 1
i = 0
for i in ROT_LINE:
print(i,)
i = i + 1

TrUffAlDiNo
Заблокирован

29.10.2019 115 32 BIT 0

Я смотрю на этот код уже несколько часов, и испытываю чувство отвращения.
Это чувство подсказывает: "Отвернись и не реагируй."
Но чЁ тА скучна.

Ошибка, которую выдаёт тебе интерпретатор гласит о том, что ты вышел за пределы массива.
"IndexError: list index out of range".
О каком массиве кричит интерпретатор - не ясно.
В предоставленном участке кода имеется несколько видов: список, множество и какой-то генератор множества.
С самой первой строчки возникает вопрос: а зачем брать в круглые скобки вводимые с клавиатуры данные ?
NK = (input().split())
В этой строчке явно чего-то не хватает или что-то лишнее.
Это строчка - не единственная, вызывающая недоумение.
Весь участок кода - сплошное недоразумение.

Твою проблему невозможно решить, взяв и исправив какую-то незаметную деталь.
Глядя на твой код, возникает чувство, что ты вовсе не понимаешь, что написано в коде.
Там какой-то бред обкуренного наркомана.
Там, где ты списал этот участок кода, он предназначался для чего-то, о чем тебе не нужно.
Если тебе действительно нужна помощь, то выкладывай всё:
Задание
Свой код от начала и до конца: от /usr/bin/python до . main().
Иначе нет никакого смысла гадать, читать твои мысли, предполагать.
Ведь видения всей задачи, после исправления одной ошибки у тебя возникнет две других.

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

Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Поделиться:
XenPorta 2 PRO © Jason Axelrod of 8WAYRUN

На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.

Как исправить ошибку IndexError: list index out of range?

ZIK1337

IndexError: list index out of range
Возникает при попытке обращения по индексу массива, которого не существует.

Например если взять массив
ms_list = [1, 2, 3]
состоящий из 3 элементов
И попытаться обратиться к элементу 5, которого не существует, то выйдет ошибка

>>> ms_list = [1, 2, 3] >>> ms_list[5] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range >>>

Обращаться к элементам массива по индексу можно лишь когда индекс присутствует в массиве, а так же если вы уверены, что размер массива не может меняться вариативно. Так же надо помнить, что индексы начинаются с 0. Так в массиве [1, 2, 3] чтобы обратиться к значению 1, нужно обратиться по индексу [0], и для обращения к 3 индекс будет [2].

По предоставленному коду непонятно что делает эта строчка:
mss = dictionary[str('word')
В питоне нет такого синтаксиса.

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

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