Python遍历集合为何无需索引?迭代元素作下标为何报错
报错原因
两种for循环的迭代变量取值逻辑完全不同:
- 写法
for i in cities:是直接迭代列表内存储的元素,每一轮循环的i就是列表里的具体值,依次为'London'、'Toronto'、'Paris'、'Oslo',因此直接执行print(i)可以正常输出所有城市名。 - 写法
print(cities[i])触发报错,是因为此时传入方括号的i是字符串类型的城市名,而Python列表的索引仅支持整数、切片类型,传入字符串自然会抛出类型错误。 - 循环外执行
cities[0]能正常返回结果,是因为传入的0是合法的整数索引,对应列表第一个位置的元素,和循环中传入字符串作为索引的场景没有可比性。
索引导向的正确遍历写法
如果遍历过程中确实需要用到索引位置,不要直接迭代列表元素,选以下两种标准写法即可:
- 搭配
range()和列表长度生成连续整数索引:
cities = ['London', "Toronto", 'Paris', 'Oslo'] for i in range(len(cities)): print(cities[i])
- 用
enumerate()同时获取索引和对应元素,可读性更高:
cities = ['London', "Toronto", 'Paris', 'Oslo'] for index, city in enumerate(cities): print(f"第{index}个城市是{city}")
遍历场景下如果不需要用到索引位置,直接迭代元素本身的写法最简洁,不需要额外绕索引访问的逻辑。
内容的提问来源于stack exchange,提问作者Master_Roshy
相关产品推荐
相关产品推荐

