Почему цикл for пытается получить доступ к элементу вне диапазона списка?

При переборе списка я получаю ключевую ошибку, я не понимаю, почему, поскольку я перебираю от 0 до диапазона (len (список))

Я пытался выполнить итерацию от 0 до len(list), но len возвращает целое число, поэтому я не могу выполнить итерацию по нему. Затем я попытался выполнить итерацию от 0 до диапазона (len (список)), потому что «диапазон» возвращает список целых чисел от 0 до len (список). Однако я получаю ключевую ошибку

for index in range(len(objectName.listName)):
    print("\n\t listName[%i]: %s" % (index, objectName.listName[index]))

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

Трассировка (последний последний вызов): файл "filename.py", строка 276, в печати ("\n\t listName[%i]: %s" % (index, objectName.listName[index])) KeyError: 10

Я ожидал увидеть каждый элемент распечатанным.

Примечание. Всего 10 элементов (с индексом 0 -> 9), но итератор пытается получить доступ к «ключу: 10».


person MarkMark    schedule 29.01.2019    source источник
comment
что выводит len(objectName.listName)?   -  person Santhosh Kumar    schedule 29.01.2019
comment
@ IllllIll Сантош Кумар IllllI Результат соответствует ожидаемому. Он выводит listName[index]: INTEGER, где index равен [0, 9] в зависимости от того, на какой итерации он включен, а INTEGER — это значение int, хранящееся в listName по соответствующему индексу.   -  person MarkMark    schedule 29.01.2019
comment
Что показывает вывод команды len? 10?   -  person Santhosh Kumar    schedule 29.01.2019
comment
@IllllIll Сантош Кумар IllllI Вызов команды len для objectName.listName возвращает значение 11   -  person MarkMark    schedule 29.01.2019


Ответы (1)


for index in range(len(objectName.listName)-1):
    print("\n\t listName[%i]: %s" % (index, objectName.listName[index]))

Поскольку len(objectName.listName) возвращает 11
range(11) = 0,1,2...10

person Santhosh Kumar    schedule 29.01.2019
comment
@ IllllIll Сантош Кумар IllllI Я согласен с вашим утверждением, но это не отвечает на вопрос. Я получаю длину, вызывая функцию len в списке, а затем использую ее в качестве границы, пока я перебираю список. Поскольку я получаю конечную границу из длины самого списка, то почему итератор пытается получить доступ к индексу за пределами этой границы? - person MarkMark; 29.01.2019
comment
функция len возвращает 11 вместо 10, поэтому диапазон выходит за пределы 9 - person Santhosh Kumar; 29.01.2019
comment
Но если я получаю эту длину из самого списка, то пытаюсь перебрать этот диапазон. Как это не правильный диапазон списка? например создание списка следующим образом: list1=[0,1,2,3,4,5,6,7,8,9], затем выполнение печати: print(len(list1)) вернет 10. Если я затем сделаю следующее: для индекса в диапазоне (len (list1)): print (% i % index) я получу следующее: 0123456789 без проблем. Так почему это не то же самое в исходном вопросе? - person MarkMark; 29.01.2019
comment
для этого мне нужно больше узнать о objectName.listName. Можете ли вы распечатать эту переменную, чтобы увидеть, сколько элементов? - person Santhosh Kumar; 29.01.2019
comment
Вывод переменной дает следующее: listName[0]: (6, 1, 1), listName[1]: (6, 1, 4), listName[2]: (6, 1, 4), listName[3] : (6, 1, 6), listName[4]: (6, 1, 5), listName[5]: (6, 1, 2), listName[6]: (6, 1, 8), listName[ 7]: (6, 1, 3), имя_списка[8]: (6, 1, 4), имя_списка[9]: (6, 1, 7). ПРИМЕЧАНИЕ. Каждый элемент в списке является кортежем. - person MarkMark; 29.01.2019
comment
Вы вручную получили все выходные данные, такие как listName[0] listName[1]...? потому что я пробовал локально, но я не мог этого увидеть. - person Santhosh Kumar; 29.01.2019