Как исправить IndexError: list index out of range?
выдает ошибку
if ‘city’ and ‘country’ in info[‘items’][i]:
IndexError: list index out of range
как исправить?
- Вопрос задан более года назад
- 1298 просмотров
Комментировать
Решения вопроса 1

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?

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')
В питоне нет такого синтаксиса.