内置函数 enumerate() 接收一个可迭代对象(如列表、字符串、元组、集合等),返回一个迭代器对象,其中每个元素都是一个 (索引, 元素) 的元组。
它相当于给可迭代对象“自动加上编号”,非常适合用于 for 循环中。
一、函数语法
enumerate(iterable, start=0)参数:
iterable:必填。任何可迭代对象,如列表、字符串、元组、字典、range 等。
start:可选。索引起始值,默认为 0。
返回值:
返回一个 enumerate 对象,本质是惰性迭代器(iterator),每个元素为 (index, element) 形式的元组。
二、基本用法示例
推荐用法模板:
for i, value in enumerate(iterable, start=0):
...1、遍历列表并获取索引和值
fruits = ['apple', 'banana', 'cherry']
for index, value in enumerate(fruits):
print(index, value)输出:
0 apple
1 banana
2 cherry2、改变起始索引编号
fruits = ['apple', 'banana', 'cherry']
for i, item in enumerate(fruits, start=1):
print(f"第{i}个水果是 {item}")输出:
第1个水果是 apple
第2个水果是 banana
第3个水果是 cherry3、转换为列表或元组
nums = [10, 20, 30]
print(list(enumerate(nums))) # [(0, 10), (1, 20), (2, 30)]
print(tuple(enumerate(nums))) # ((0, 10), (1, 20), (2, 30))三、进阶技巧
1、与字符串一起使用
s = "abc"
for i, ch in enumerate(s):
print(i, ch)输出:
0 a
1 b
2 c2、与字典搭配使用
(1)直接用 dict()
colors = ['red', 'green', 'blue']
index_map = dict(enumerate(colors, start=100))
print(index_map)
# 输出:{100: 'red', 101: 'green', 102: 'blue'}(2) 结合字典推导式
students = ['Tom', 'Jerry', 'Spike']
score_map = {name: score for score, name in enumerate(students, start=60)}
print(score_map)
# 输出: {'Tom': 60, 'Jerry': 61, 'Spike': 62}3、替代传统的 range(len(...)) 写法
旧写法(不推荐):
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(i, fruits[i])推荐写法:
fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
print(i, fruit)4、搭配 手动迭代
data = ['x', 'y']
it = enumerate(data, start=10)
print(next(it)) # (10, 'x')
print(next(it)) # (11, 'y')四、补充说明
1、enumerate() 返回的是惰性迭代器,需要通过循环或 list() 等方式取出全部内容。
print(list(enumerate("abc"))) # [(0, 'a'), (1, 'b'), (2, 'c')]2、start 参数只影响索引起始值,不会影响原数据内容。
3、enumerate() 不会修改原始数据结构。
4、与 对比:
# enumerate() 给 iterable 自动编号
enumerate(['a', 'b']) → [(0, 'a'), (1, 'b')]
# zip() 将两个 iterable 按位配对
zip([0,1], ['a','b']) → [(0, 'a'), (1, 'b')]小结
enumerate() 在遍历可迭代对象时能同时提供索引和值,支持自定义起始索引,返回惰性迭代器。它常用于替代 range(len(...)),让循环写法更直观、简洁。
“点赞有美意,赞赏是鼓励”
热门跟贴