enumerate()是 Python 的一个内置函数,用于在遍历可迭代对象(如列表、元组、字符串)时,同时获取元素的索引(序号)和值。
1. 基本语法
enumerate(iterable, start=0)iterable:可迭代对象(列表、字符串等)。start:索引的起始值,默认是0。
2. 为什么需要它?
在没有enumerate()时,如果想同时拿到索引和值,通常会写得很繁琐:
# 传统写法(不推荐) fruits = ["苹果", "香蕉", "橘子"] for i in range(len(fruits)): print(f"索引 {i}: {fruits[i]}")使用了enumerate()后,代码变得非常优雅:
# enumerate 写法(推荐) fruits = ["苹果", "香蕉", "橘子"] for index, fruit in enumerate(fruits): print(f"索引 {index}: {fruit}")3. 其他用法
指定起始索引(start参数)
如果希望序号从 1 开始,而不是默认的 0:
fruits = ["苹果", "香蕉", "橘子"] for index, fruit in enumerate(fruits, start=1): print(f"第 {index} 个水果是: {fruit}") # 输出: # 第 1 个水果是: 苹果 # 第 2 个水果是: 香蕉 # 第 3 个水果是: 橘子转换为列表或字典enumerate()返回的是一个迭代器。如果直接打印它,会得到一个对象地址;如果把它转成列表,就能看到它生成的内容:
fruits = ["苹果", "香蕉"] print(list(enumerate(fruits))) # 输出: [(0, '苹果'), (1, '香蕉')] # 转换为字典(常用于快速建立索引映射) print(dict(enumerate(fruits))) # 输出: {0: '苹果', 1: '香蕉'}4. 底层本质
enumerate()本质上是一个生成器。当在for循环中使用它时,每次迭代它会吐出一个(index, value)的元组。
因此,也可以手动使用next()来取值:
fruits = ["苹果", "香蕉"] e = enumerate(fruits) print(next(e)) # 输出: (0, '苹果') print(next(e)) # 输出: (1, '香蕉')所以只要需要在for循环中同时用到索引和元素值,首选enumerate(),它会比手动维护一个计数器或者用range(len(...))更加优雅简洁。