TypeError / IndexError при итерации с циклом for - PullRequest
0 голосов
/ 19 октября 2018

Я использую цикл for для итерации по списку, подобному этому:

lst = ['a', 'b', 'c']
for i in lst:
    print(lst[i])

Но должно быть что-то не так с этим, потому что он выдает следующее исключение:

Traceback (most recent call last):
  File "untitled.py", line 3, in <module>
    print(lst[i])
TypeError: list indices must be integers or slices, not str

И если я попробую то же самое со списком целых чисел, вместо этого будет выдано IndexError:

lst = [5, 6, 7]
for i in lst:
    print(lst[i])
Traceback (most recent call last):
  File "untitled.py", line 4, in <module>
    print(lst[i])
IndexError: list index out of range

Что не так с моим циклом for?

1 Ответ

0 голосов
/ 19 октября 2018

Цикл Python for выполняет итерации по значениям списка, а не индексам :

lst = ['a', 'b', 'c']
for i in lst:
    print(i)

# output:
# a
# b
# c

. Поэтому вы получаете сообщение об ошибке, если пытаетесьиндексировать lst с помощью i:

>>> lst['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not str
>>> lst[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

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

lst = ['a', 'b', 'c']
for val in lst:
    print(val)

# output:
# a
# b
# c

И если действительно нуждаются в индексах в вашем цикле, вы можете использовать функцию enumerate:

lst = ['a', 'b', 'c']
for i, val in enumerate(lst):
    print('element {} = {}'.format(i, val))

# output:
# element 0 = a
# element 1 = b
# element 2 = c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...