内置函数 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 cherry

2、改变起始索引编号

fruits = ['apple', 'banana', 'cherry']

for i, item in enumerate(fruits, start=1):
    print(f"第{i}个水果是 {item}")

输出:

第1个水果是 apple
第2个水果是 banana
第3个水果是 cherry

3、转换为列表或元组

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 c

2、与字典搭配使用

(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(...)),让循环写法更直观、简洁。

点赞有美意,赞赏是鼓励