目录
一、枚举函数 —— enumerate
enumerate(iterable, start=0)
枚举函数返回一个枚举对象 —— 迭代器 iterator。每次迭代,内部将调用 __next__ 方法并返回一个 tuple,内含一个计数值 (默认从 start=0 开始计数) 和一个获取自可迭代对象 iterable 的值。例如:
>>> x = ['a', 'b', 'c', 'd', 'e']
>>> for i in enumerate(x):
print(i)
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
# ----------------------------------------------------------------------------
>>> list(enumerate(x)) # 迭代器 iterator 是惰性的, 常用显示类型转换令其强制运算
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]
但通常会用两个局部变量来对每次迭代的 tuple 解包,以便于接收迭代内容的同时,获取额外的计数值 (常用作索引) 而无需自定义计数器:
>>> index = -1 # 初始化计数器 (全局变量)
>>> for element in x: # 使用自定义计数器
index += 1
print(index, element)
0 a
1 b
2 c
3 d
4 e
# --------------------------------------------------------------------
>>> for (index, element) in enumerate(x): # 使用 enumerate 关键字
0 a
1 b
2 c
3 d
4 e
# --------------------------------------------------------------------
>>> for index, element in enumerate(x): # 对于非嵌套的可迭代对象, 两种用法等价
print(index, element)
0 a
1 b
2 c
3 d
4 e
事实上,全局变量的查询和访问速度低于局部变量,应尽量减少全局变量的使用,尤其是在循环中,而使用 enumerate 关键字就是一个不错的替代方案。
此外,enumerate 的参数 start 作