Python enumerate() 语法
enumerate() 是 Python 的一个内置对象,它用于在遍历可迭代对象时,同时获取元素的索引和值。
语法:
enumerate(iterable, start=0)说明:
enumerate() 函数接收以下 2 个参数。
iterable(必选):表示一个可迭代对象。start(可选,默认值:0):表示从哪个数字开始计算。比如 start = 10,则表示从 10 开始计算。
enumerate() 函数会返回一个由元组组成的迭代器,每个元组包含 2 个元素:第 1 个元素是元素的索引,第 2 个元素是元素的值,即 (index, element)。
提示:
- enumerate() 返回的是一个迭代器对象。这意味着它采用的是惰性求值,在需要时才生成元组,这对于处理大型数据集非常高效。
- enumerate() 的主要优势是提高代码的可读性和简洁性,避免了手动管理索引变量的需要。
Python enumerate() 摘要
| 使用频率 | 高 |
|---|---|
| 时间复杂度 | O(1)(创建迭代器本身)、O(n)(迭代 n 个元素) |
| 官方文档 | 查看 |
| 相关函数 | range()、zip()、iter()、next() |
Python enumerate() 示例
在遍历一个列表时,如果需要同时获取元素的索引以及值,常用有两种写法:① 使用 for 循环;② 使用 enumerate() 函数。
示例 1:使用 for 循环
colors = ['红', '绿', '蓝']
for i in range(len(colors)):
print(i, colors[i])运行结果如下。
0 红
1 绿
2 蓝示例 2:使用 enumerate() 函数
colors = ['红', '绿', '蓝']
for index, color in enumerate(colors):
print(index, color)运行结果如下。
0 红
1 绿
2 蓝示例 3:enumerate() 带 2 个参数
animals = ['ant', 'bee', 'cat', 'dog', 'ewe']
for index, animal in enumerate(animals, start=2):
print(index, animal)运行结果如下。
2 ant
3 bee
4 cat
5 dog
6 ewe分析:
默认情况下,enumerate() 开始下标为 0,而 enumerate(animals, start = 2) 表示开始下标为 2。下面 2 种写法是等价的:
# 写法 1
enumerate(animals, start=2)
# 写法 2
enumerate(animals, 2)示例 4:enumerate() 与 list() 结合使用
animals = ['ant', 'bee', 'cat', 'dog', 'ewe']
result = enumerate(animals, start=1)
print(list(result))运行结果如下。
[(1, 'ant'), (2, 'bee'), (3, 'cat'), (4, 'dog'), (5, 'ewe')]enumerate() 注意事项
虽然 enumerate() 函数功能强大且方便,但是在使用时仍然有几个重要的地方需要特别注意一下。
1. 迭代器不可重复使用
enumerate() 返回的是迭代器。而迭代器有一个重要特性:只能被遍历一次!一旦你遍历完一个 enumerate 迭代器,它就被 “耗尽” 了,并且无法再次使用。
如果想要再次遍历相同的数据,我们需要重新调用 enumerate() 来生成一个新的迭代器。
nums = [10, 20, 30]
result = enumerate(nums)
print(list(result)) # 输出:[(0, 10), (1, 20), (2, 30)]
print(list(result)) # 输出空列表,迭代器已耗尽2. 性能优势
相比于 range(len()) 这种写法,enumerate() 函数可以直接获取元素,避免通过索引重复访问容器,效率会更高。
| 方法 | 特点 | 适用场景 |
|---|---|---|
| for i in range(len(x)) | 需通过索引访问元素,代码冗余 | 需要严格控制索引步长时 |
| enumerate(x) | 直接获取索引和元素,代码简洁高效 | 同时需要索引和元素的循环操作 |
| zip() | 并行迭代多个可迭代对象 | 合并处理多个数据集时 |
