Python 的 for 循环中如何同时获取索引和元素?
用 enumerate():for i, item in enumerate(items) 同时拿到下标与元素,start 参数可改起始值。避免 range(len()) 的写法。本文给出示例与常见变体。
用内置函数 enumerate():for i, item in enumerate(items)——i 是下标、item 是元素;enumerate(items, start=1) 可从 1 开始计数。
标准用法
fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple / 1 banana / 2 cherry
for i, fruit in enumerate(fruits, start=1): # 从 1 开始
print(i, fruit)
反例与正例
# ❌ 不推荐:先取长度再按下标取
for i in range(len(fruits)):
print(i, fruits[i])
# ✅ 推荐:enumerate 直接解包
for i, fruit in enumerate(fruits): ...
start 只改变计数起点,不会跳过输入元素。
相关技巧
# 只要序号计数:直接用 enumerate 而不是手动维护计数器
# 同时遍历两个列表:zip
for a, b in zip(names, scores): ...
# 三个都要:enumerate + zip 组合
for i, (a, b) in enumerate(zip(names, scores)): ...
zip 默认在最短输入耗尽时停止;Python 3.10+ 可用 zip(..., strict=True) 检测长度不一致。
常见问题(FAQ)
Q:enumerate 返回的是什么? 惰性迭代器,只维护计数与迭代状态,不会预先生成完整结果列表;list(enumerate(x)) 可得到 (index, value) 元组列表。
Q:字典能用 enumerate 吗? 可以但语义是"第几个键";遍历键值用 dict.items()。