python enumerate()函数
在本Python教程中,我们将重点介绍Python的enumerate()函数及其一些简单而实际的示例。
Python enumerate()函数语法
有时候,当我们在for循环中遍历一个容器时,我们想要访问正在处理的当前项目的索引(列表中的当前位置)。
一种解决方法是:
i = 0 for value in collection: # do something with value i += 1
由于这很常见,因此Python具有内置函数enumerate()
,该函数返回序列(i
,value)元组,其中每个元组的第一个对象是索引,第二个是原始对象物品。
for i, value in enumerate(collection): # do something with value
pythonenumerate()
函数的一般语法:
enumerate(iterable, start=0)
其中
iterable
-必须是序列,迭代器或者其他支持迭代的对象start(可选)
-enumerate()从该数字开始计数,如果未提供,则默认为0。
示例1:了解python enumerate()的工作方式
让我们以包含列表的这个简单示例脚本为例。
我将遍历列表的各个项目,然后将索引位置编号添加到每个值之前。
通常我会写这样的代码:
该脚本的输出:
~]# python3 python-enumerate.py 0: ab 1: cd 2: ef
现在感谢pythonenumerate()
函数,我们可以用更多Python方式重新编写相同的代码:
#!/usr/bin/env python3 mylist = ['ab', 'cd', 'ef'] ## List for i, val in enumerate(mylist): print(f'{i}: {val}')
该脚本的输出:
~]# python3 python-enumerate.py 0: ab 1: cd 2: ef
因此,两种方法的输出都是相同的,但是在复杂的场景中," enumerate()"可以为我们节省很多代码。
示例2:在文件中开始行之前添加行号
在此python代码中,我将打开一个文件以读取并在每行之前添加行号,并输出输出。
我没有修改文件的内容。
#!/usr/bin/env python3 import sys ## take the file as input argument filename = sys.argv[1] with open(filename) as myfile: for index, line in enumerate(myfile): print(f"{index}: {line}", end="")
enumerate()函数返回一个元组序列,我们的for循环将每个元组分成两个值,并且print语句将它们格式化在一起。
如我们所见,计数器值已添加到每一行。
由于默认情况下counter是从0开始,所以行数也是从0开始。
如果我们希望从1开始计数,那么我们必须使用index + 1对代码进行一些小的修改。
因为枚举(像所有序列一样)都是从零开始的,所以它为每个行号的索引加1.
#!/usr/bin/env python3 import sys ## take the file as input argument filename = sys.argv[1] with open(filename) as myfile: for index, line in enumerate(myfile): ## using index+1 to start the count from 1 print(f"{index+1}: {line}", end="")
因此,现在索引值按预期从1开始。
示例3:使用enumerate()创建字典
在为数据建立索引时,使用枚举的有用模式是计算将序列值(假定为唯一)映射到序列中其位置的dict:
#!/usr/bin/env python3 mycars = ['maruti', 'hyundai', 'honda'] mapping = {} ## empty dictionary for index, value in enumerate(mycars): mapping[value] = index print(mapping) ## content of mapping print(type(mapping)) ## type of mapping
该脚本的输出:
~]# python3 python-enumerate-2.py {'maruti': 0, 'hyundai': 1, 'honda': 2} <class 'dict'>
示例4:将索引和值打印为元组
我们一直在通过分隔索引和值来修改输出,但是如果我们只是在enumerate()
上进行迭代,则会得到一个元组,因此不需要修改,只需一个简单的for循环就可以完成工作。
#!/usr/bin/env python3 mylist = ['ab', 'cd', 'ef'] ## List for val in enumerate(mylist): print(val) print(type(val))
该脚本的输出:
~]# python3 python-enumerate-3.py (0, 'ab') <class 'tuple'> (1, 'cd') <class 'tuple'> (2, 'ef') <class 'tuple'>
我们还可以采用列表格式获取输出:
#!/usr/bin/env python3 mylist = ['ab', 'cd', 'ef'] ## List mynewlist = list(enumerate(mylist)) print(mynewlist) print(type(mynewlist))
该脚本的输出:
~]# python3 python-enumerate-3.py [(0, 'ab'), (1, 'cd'), (2, 'ef')] <class 'list'>
示例5:定义起始编号以开始计数
默认情况下,我们已经看到单个项目的计数以" 0"开始,但是我们可以使用" start = <num>"定义自己的起点,其中我们可以将" num"替换为任何整数值。
在上面使用的同一示例中,我们将定义一个不同的起始编号:
#!/usr/bin/env python3 mylist = ['ab', 'cd', 'ef'] ## List mynewlist = list(enumerate(mylist, start=100)) print(mynewlist) print(type(mynewlist))
该脚本的输出:
~]# python3 python-enumerate-3.py [(100, 'ab'), (101, 'cd'), (102, 'ef')] <class 'list'>
因此,现在我们的输出包含一个列表,其中第一个项目的计数从100开始,列表中每个项目的计数都由1添加