IndexError Exception

1

Я нахожусь в классе программирования начального уровня, используя Python, и я изо всех сил пытался понять концепцию в нашем учебнике.

# This code will cause an IndexError exception.
my_list = [10, 20, 30, 40]
index = 0
while index < 5:
    print(my_list[index])
    index += 1

Это возвращает IndexError как предсказано, но я не понимаю точной причины, но я понимаю, что индекс, установленный в <5 в цикле, вызывает ошибку. Мне просто нужна помощь, чтобы понять логику ошибки, а не решение ошибки.

  • 3
    Всего 4 элемента.
  • 1
    С индексами 0 , 1 , 2 и 3 вы уже получили доступ ко всем 4 элементам списка. Нет индекса 4 . Индексирование с нуля означает, что последний индекс всегда имеет длину минус 1.
Теги:
list
indexing

1 ответ

0

Решение

С индексами 0, 1, 2 и 3 вы уже получили доступ ко всем 4 элементам списка. Нет индекса 4. Индексирование с нулевым индексом означает, что последний индекс всегда имеет длину минус 1.

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

my_list = [10, 20, 30, 40]
index = 0
while index < 4:
    print(my_list[index])
    index += 1

Однако это будет "жесткое кодирование" цикла, и если вы должны изменить длину my_list вам придется изменить условия цикла. Поэтому я предлагаю вам изменить условия для проверки длины my_list. Что-то вроде этого будет работать...

my_list = [10, 20, 30, 40]
index = 0
while index < len(my_list):
    print(my_list[index])
    index += 1

Другие решения

Существуют и другие более эффективные способы распечатки содержимого списка.

Заполнение содержимого списка

for value in my_list: 
    print(value)

Используя выделенное выражение (обратите внимание, что выдает содержимое в той же строке)

print(*my_list)

  • 1
    Зачем вообще создавать индекс? for value in my_list: print(value) будет гораздо более полезным и лаконичным, а также гораздо менее подверженным ошибкам. И если вы собираетесь сгенерировать индекс, тогда цикл for обычно все равно лучше, с enumerate() или range() .
  • 0
    Я согласен. Варианты, которые вы упомянули, были бы гораздо более эффективными и лаконичными. Тем не менее, некоторые из этих концепций могут быть трудными для тех, кто довольно плохо знаком с Python. Я обновлю свой ответ, чтобы включить ваши предложения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню