Python 内置函数 enumerate() 详解
Python 内置函数 enumerate()。该函数用于在遍历可迭代对象时自动获取索引和值,返回枚举对象。文章涵盖基本语法、自定义起始索引、底层原理(生成器)、与普通循环对比及高级用法。相比手动维护索引,enumerate() 代码更简洁、可读性更高且内存占用相似。适用于列表、字符串、字典等多种可迭代对象,是 Python 编程中的常用技巧。

Python 内置函数 enumerate()。该函数用于在遍历可迭代对象时自动获取索引和值,返回枚举对象。文章涵盖基本语法、自定义起始索引、底层原理(生成器)、与普通循环对比及高级用法。相比手动维护索引,enumerate() 代码更简洁、可读性更高且内存占用相似。适用于列表、字符串、字典等多种可迭代对象,是 Python 编程中的常用技巧。

enumerate /ɪˈnjuːməreɪt/
中文名即为枚举。
日常 Python 编程中,我们经常需要在遍历列表、元组或字符串时,同时获取元素的索引和值。如果你曾这样写过代码:
index = 0
for value in ['a', 'b', 'c']:
print(index, value)
index += 1
那恭喜你,是时候认识一个更优雅的 Python 内置函数——enumerate()。
enumerate() 是 Python 的内置函数,用于在遍历可迭代对象时自动计数。它返回一个枚举对象(enumerate object),其中每个元素是一个 (index, value) 元组。
enumerate(iterable, start=0)
参数说明:
iterable:可迭代对象(如列表、元组、字符串等)start:索引的起始值(默认从 0 开始)返回值:
enumerate 对象fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit)
输出:
0 apple
1 banana
2 cherry
可以看到,enumerate() 自动为我们生成了索引。
有时候我们不希望从 0 开始计数,比如行号通常从 1 开始。可以使用 start 参数来自定义:
for index, fruit in enumerate(fruits, start=1):
print(f"第{index}个水果是 {fruit}")
输出:
第 1 个水果是 apple
第 2 个水果是 banana
第 3 个水果是 cherry
enumerate() 实际上等价于下面这种写法:
def my_enumerate(iterable, start=0):
n = start
for elem in iterable:
yield n, elem
n += 1
它返回的是一个生成器(iterator),在循环中逐步生成索引和值,因此不会占用额外的内存。
| 功能 | 普通循环 | 使用 enumerate() |
|---|---|---|
| 需要手动维护索引 | 是 | 否 |
| 可读性 | 一般 | 更高 |
| 内存占用 | 相似 | 相似 |
| 推荐使用 | 不推荐 | 推荐 |
示例对比:
# 传统写法
for i in range(len(fruits)):
print(i, fruits[i])
# enumerate 写法(更简洁)
for i, fruit in enumerate(fruits):
print(i, fruit)
下次你再需要索引和元素同时出现时,记得不要再用 range(len(...)),直接用 enumerate()。
enumerate() 常常与条件判断搭配使用,用来查找特定元素的位置。
nums = [10, 20, 30, 40, 50]
for i, num in enumerate(nums):
if num == 30:
print(f"找到了 30,在索引 {i}")
输出:
找到了 30,在索引 2
enumerate() 不仅能用于列表,也能用于字符串、元组、集合、字典(遍历 key 或 value)等。
for i, ch in enumerate("Python"):
print(i, ch)
输出:
0 P
1 y
2 t
3 h
4 o
5 n
data = {'a': 1, 'b': 2, 'c': 3}
for i, key in enumerate(data):
print(i, key, data[key])
输出:
0 a 1
1 b 2
2 c 3
enumerate() 返回的是一个枚举对象,我们可以直接转换为其他类型。
fruits = ['apple', 'banana', 'cherry']
# 转换为列表
print(list(enumerate(fruits)))
# [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
# 转换为字典
print(dict(enumerate(fruits, start=1)))
# {1: 'apple', 2: 'banana', 3: 'cherry'}
这在数据映射或索引管理时非常实用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online