Цикл 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