1、enumerate是Python的一个内置函数。你应该充分利用它通过循环迭代自动生成的索引变量。
2、索引值默认从0开始,但也可以将其设置为任何整数。
3、enumerate函数是从2.3版本开始被添加到Python中的
4、Python的enumerate函数可以帮助你编写出更加Pythonic和地道的循环结构,避免使用笨重且容易出错的手动生成索引。
5、为了充分利用enumerate的特性,一定要研究Python的迭代器和数据结构解包功能。
enumerate() 函数属于非常有用的高级用法,
用来遍历一个集合对象,在遍历的同时还可以得到当前元素的索引位置。
我们看一个例子:
names = ["Alice","Bob","Carl"] for index,value in enumerate(names): print(f'{index}: {value}')
这段代码会输入如下内容
0: Alice 1: Bob 2: Carl
正如所看到的,这个循环遍历了names列表的所有元素,并通过增加从零开始的计数器变量来为每个元素生成索引。
另一个有用的特性是,enumerate()函数允许我们为循环自定义起始索引值。
enumerate()函数中接受一个可选参数,该参数允许你为本次循环中的计数器变量设置初始值:
names = ["Alice","Bob","Carl"] for index,value in enumerate(names,1): print(f'{index}: {value}')
在上面的例子中,我将函数调用改为enumerate(names, 1),后面的参数1就是本次循环的起始索引,替换默认的0:
1: Alice 2: Bob 3: Carl
OK,这段代码演示的就是如何将Python的enumerate()函数默认0起始索引值修改为1(或者其他任何整形值,根据需求去设置不同值)
他通过Python迭代器来实现的。
意思就是每个元素的索引是懒加载的(一个接一个,用的时候生成),这使得内存使用量很低并且保持这个结构运行很快。
请看如下代码:
>>> names = ['Alice', 'Bob', 'Carl'] >>> enumerate(names) <enumerate object at 0x1057f4120>
在上面这个代码片段中,正如你所见,我使用了和前面一样的示例代码。但是,调用enumerate()函数并不会立即返回循环的结果,而只是在控制台中返回了一个enumerate对象。
正如你所看到的,这是一个“枚举对象”。它的确是一个迭代器。就像我说的,它会在循环请求时懒加载地输出每个元素。
为了验证,我们可以取出那些“懒加载”的元素,我计划在这个迭代器上调用Python的内置函数list()。
>>> list(enumerate(names)) [(0, 'Alice'), (1, 'Bob'), (2, 'Carl')]
对于输入list()中的每个enumerate()迭代器元素,迭代器会返回一个形式为(index,element)的元组作为list的元素。在典型的for-in循环中,你可以利用Python的数据结构解包功能来充分利用这一点特性:
for index, element in enumerate(iterable): # ...