我正在使用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
循环出了什么问题?
答案 0 :(得分:2)
Python的for
循环遍历列表的值,而不是 indices :
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
许多人使用索引来摆脱习惯,因为他们习惯于从其他编程语言中那样进行索引。但是在python中,您很少需要索引。遍历值更加方便:
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
答案 1 :(得分:0)
推论:命名您的循环变量,以避免混淆和错误的代码
for i in lst
是一个可怕的名字
lst[i]
,这是胡说八道,并且会引发错误for x in lst
,for el in lst
,for lx in lst
。
lst[el]
;名称的选择非常明显,它没有索引,并且可以防止您胡说八道。摘要:
enumerate()
:for i, x in enumerate(list): ...