第10条:尽量用enumerate取代range

核心要点:

(1)enumerate函数提供了一种精简的写法,可以在遍历迭代器时获知每个元素的索引。

(2)尽量用enumerate来改写那种将range与下标访问相结合的序列遍历代码。

(3)可以给enumerate提供第二参数,以指定开始计数时所用的值(默认为0)

在一系列整数上面迭代时,内置的range函数很有用。

对于字符串列表这样的序列式结构,可以直接在上面迭代。

>>> name_list = ['kebi','maoxian','xiaoniao','xingye']
>>> for name in name_list:
...     print("%s is very handsome" % name)
... 
kebi is very handsome   #科比是最帅的
maoxian is very handsome   #毛线是最帅的
xiaoniao is very handsome
xingye is very handsome

当迭代列表的时候,通常还想知道当前元素在列表中的索引。

例如,要个每个人加上一个序号,就可以用range来实现。

>>> for i in range(len(name_list)):
...     name = name_list[i]
...     print('%d:%s' % (i+1,name))
... 
1:kebi
2:maoxian
3:xiaoniao
4:xingye

与单纯迭代name_list或是单纯使用range的代码相比,上面这段代码有些生硬。

我们必须获取列表长度,并且通过下标来访问数字,这种代码不便于理解。

python提供了内置函数enumerate(枚举)函数,以解决此问题。enumerate可以把各种迭代器包装为生成器,以便稍后产生输出值。

生成器每次产生一堆输出值,其中,前者表示循环下标,后者表示从迭代器中获取到的下一个元素。这样写出来的代码会非常的简洁。

>>> for i,name in enumerate(name_list,1):
...     print('%d:%s'% (i,name))
... 
1:kebi
2:maoxian
3:xiaoniao
4:xingye

文章摘抄于Brett Slatkin的《编写高质量Python代码的59个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。

原文地址:https://www.cnblogs.com/yangmingxianshen/p/8018371.html