Python: enumerate() 函数 [以记录元素索引的方式迭代序列]

首先我们来了解一下enumerate()函数的语法

语法

enumerate( sequence, [start = 0])
其中,第一个参数是一个可迭代的序列,第二个参数start则是序列中首个元素的行号从几开始(默认从0开始)。

简单用例

l1 = [x**2 for x in range(5)]
for index, value in enumerate(l1):
    print(index, value)
--------------------------------------------------------------------
l1 = [x**2 for x in range(5)]
for index, value in enumerate(l1, start=2):
    print(index, value)

二者的输出结果分别是
(注意enumerate中的start参数变化)

0 0     |   2 0
1 1     |   3 1
2 4     |   4 4
3 9     |   5 9
4 16	|   6 16	

注意下面(x, y, z)的括号不可以去掉!

l1 = [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
for index, (x, y, z) in enumerate(l1):
    print(index, x, y, z)

返回值
enumerate()函数返回的是enumerate对象实例,他是一个迭代器,可返回连续的元组。元组由索引值和对传入的序列不断调用next()方法得到的值组成。


enumerate()应用

记录文件错误信息的行号

了解了enumerate函数的用法后,我们可以更加方便处理一些迭代序列的问题。想象一下你有一个存有海量内容的txt文件,我们正在对该文件的内容进行修改,往往我们会遇到修改出错的情况, 我们根据原始报错的内容来定位文件中的错误耗时且费力。而用enumerate函数来实现记录文件中错误信息的行号就可以大大提高效率。

现在有一个名叫123的txt文件,内容如下:
在这里插入图片描述
如下定义了一个open_file函数对文件内容进行操作,显然try语句会触发ValueError。

def open_file(filename):
    with open(filename, 'rt') as f:
        for index, line in enumerate(f, 1):
            fields = line.split()
            print(fields)
        try:
            print(int(fields[0]))

        except ValueError as e:
            print('File_Line {}:The reason of error: {}'.format(index, e))


data = r"C:\Users\Administrator\Desktop\123.txt"
open_file(data)

因为for循环结束时临时变量line指向文件最后一行,所以field[0]是goodbye这个单词,即错误会发生在goodbye上。我们再来看看代码的运行结果。
该代码的运行结果如下:
在这里插入图片描述
可以看到,错误信息清楚地指出了文件第四行goodbye单词发生错误。

更加优雅的计数器

以往我们写计数器,一般都是先创建变量并赋初值,然后让该变量在循环里改变相应的值。
用enumerate函数之前:

l1 = [x for x in range(10)]
count = 0
for num in l1:
	...
	count += 1

用enumerate函数之后:

l1 = [x for x in range(10)]
count = 0
for count, value in enumerate(l1):
	...
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: enumerate函数Python中的一个内置函数,它可以将一个可迭代对象(如列表、元组、字符串等)转换为一个枚举对象,同时返回每个元素索引和值。其语法格式为: enumerate(iterable, start=0) 其中,iterable是要枚举的可迭代对象,start是枚举的起始值,默认为0。 使用enumerate函数可以方便地遍历一个序列,并在遍历过程中获取每个元素索引和值,例如: lst = ['apple', 'banana', 'orange'] for i, item in enumerate(lst): print(i, item) 输出结果为: 0 apple 1 banana 2 orange 在上述代码中,enumerate函数将列表lst转换为一个枚举对象,然后使用for循环遍历该枚举对象,每次循环获取当前元素索引和值,并打印输出。 ### 回答2: 在Python语言中,enumerate()函数是一种用于将一个可遍历的数据对象(如列表、元组、字符串等)组合为一个索引序列,同时列出数据和数据下标的函数。具体来说,enumerate()函数的用法如下: ``` enumerate(iterable, start=0) ``` 其中iterable为可迭代对象,如:字符串、列表等;start参数表示从第几个下标开始,默认为0。 当使用enumerate()函数对一个可迭代对象进行迭代时,会返回一个由元组组成的迭代器,每个元组包含两个元素:下标索引和该下标对应的元素值,例如: ``` fruits = ['apple', 'banana', 'cherry'] for index, item in enumerate(fruits, 1): print("index:", index, "value:", item) ``` 运行以上代码,输出结果如下: ``` index: 1 value: apple index: 2 value: banana index: 3 value: cherry ``` 另外,由于enumerate()函数返回的是一个迭代器对象,因此,我们可以借助list()函数将其转化为列表,从而进行一系列的操作,例如: ``` fruits = ['apple', 'banana', 'cherry'] enum_fruits = enumerate(fruits, 1) list_enum = list(enum_fruits) print(list_enum) ``` 运行以上代码,输出结果如下: ``` [(1, 'apple'), (2, 'banana'), (3, 'cherry')] ``` 可以看到,通过将enumerate()返回的迭代器对象转化为列表后,得到了由元组组成的列表,每个元组中包含了对应的下标索引元素值。 总而言之,enumerate()函数Python语言中一个非常方便的内置函数,它能够大大简化对可迭代对象进行遍历的操作,同时也能够为我们实现某些特定的操作提供便利。 ### 回答3: Python中的enumerate()函数是一种非常实用的内置函数,它可以让我们在遍历一个可迭代对象(例如列表、元组、字符串等)时,同时获取其对应的索引值。下面我们将详细介绍enumerate()函数的用法和示例。 1. 基本用法 enumerate()函数的基本使用方法如下所示: ``` enumerate(iterable, start=0) ``` 其中,iterable为可迭代对象,例如列表、元组或字符串等;start参数表示开始计数的索引值,默认为0。 使用方法举例: ```python fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(index, fruit) ``` 执行结果如下: ``` 0 apple 1 banana 2 cherry ``` 2. 逆向用法 有时候我们需要逆向遍历一个列表,此时可以利用reversed()函数enumerate()函数来实现,示例如下: ```python fruits = ['apple', 'banana', 'cherry'] for index, fruit in reversed(list(enumerate(fruits))): print(index, fruit) ``` 执行结果如下: ``` 2 cherry 1 banana 0 apple ``` 3. 指定开始索引 当我们需要从指定的索引值开始遍历一个列表时,可以指定start参数的值。示例如下: ```python fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits, start=1): print(index, fruit) ``` 执行结果如下: ``` 1 apple 2 banana 3 cherry ``` 4. 应用示例 使用enumerate()函数可以方便地遍历一个列表并获取索引值,例如计算列表中每个元素出现的次数: ```python fruits = ['apple', 'banana', 'cherry', 'banana', 'cherry', 'apple', 'apple', 'apple'] fruit_count = {} for index, fruit in enumerate(fruits): if fruit in fruit_count: fruit_count[fruit] += 1 else: fruit_count[fruit] = 1 print(fruit_count) ``` 执行结果如下: ``` {'apple': 4, 'banana': 2, 'cherry': 2} ``` 可以看到,列表中每个元素出现的次数成功计算出来了。 总之,enumerate()函数是一个十分实用的内置函数,它可以方便地为我们提供遍历列表的索引值,应用范围广泛,可以在列表操作、数据统计等多种场景下发挥出作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值