欢迎访问宙启技术站
智能推送

Python中的enumerate函数详解,助你轻松遍历列表!

发布时间:2023-06-14 09:12:25

在 Python 中,有一个非常实用的内置函数 enumerate(),它可以将一个可遍历的数据对象(如列表、元组、字符串等)和下标组成一个枚举对象,可以用于获取每个元素的索引和值,简化了编写循环的代码。

enumerate() 内置函数的语法格式为:

enumerate(sequence, start=0)

其中,sequence 序列是一个要被枚举的对象,start 参数是可选的设置计数开始的起始值,默认为0。

在这里,我们将从以下方面详细介绍 enumerate() 函数的用法:

1. enumerate() 函数的原理及用途

2. 如何使用 enumerate() 函数

3. enumerate() 函数与循环语句配合使用

4. 效率分析

### 1. enumerate() 函数的原理及用途

enumerate() 内置函数是一个常用的迭代器工具,它的作用是将一个序列(如列表、字符串等)组合为一个索引序列,同时列出数据和数据下标,通常用在 for 循环中。

在 for 循环中,我们经常需要对列表或其他对象中的元素进行操作并获取其索引。在 Python 中,通常会使用以下代码实现:

list = ['apple', 'banana', 'orange']
for i in range(len(list)):
    print(i, list[i])

结果:

0 apple
1 banana
2 orange

上述代码中,使用了内置函数 range() 来遍历列表,同时使用 len() 内置函数获取列表的长度来实现获取列表的下标。

上述代码虽然可以实现相应的功能,但是有时会不太直观并容易出错。

于是,Python 提供了内置函数 enumerate() ,它可以让你遍历一个序列并获得每个元素和它的下标。使用 enumerate() 函数可以大幅简化遍历列表的代码。

### 2. 如何使用 enumerate() 函数

让我们看看如何使用内置函数 enumerate() 来遍历一个列表并获取每个元素的下标。

list = ['apple', 'banana', 'orange']
for index, value in enumerate(list):
    print(index, value)

在上面的例子中,内置函数 enumerate() 的返回值被解包成了一个下标 index 和其对应的值 value,其中 value 变量存储了列表中的值,index 变量存储了值对应的下标。

输出结果:

0 apple
1 banana
2 orange

enumerate() 函数会返回一个包含元组的迭代器对象,元组中包含两个元素,一个是下标 index,一个是列表对应下标的值 value。

可以使用 tuple() 函数强制转换 enumerate() 迭代器成一个元组序列列表,以便我们查看 enumerate() 的返回值是什么:

my_list = [4, 7, 0, 3]
print(list(enumerate(my_list)))

输出结果:

[(0, 4), (1, 7), (2, 0), (3, 3)]

这里原本的列表被转换成了一个包含元组的序列列表,每个元组包含原列表中的一个值以及一个索引号。这样,我们就可以轻松使用 for 循环遍历列表并访问其对应的索引了。

### 3. enumerate() 函数与循环语句配合使用

enumerate() 函数可以直接在 for 循环中使用,这种方式非常方便,可以省去很多繁琐的代码。

for i, fruit in enumerate(["apple", "banana", "orange"]):
    print(i + 1, fruit)

输出结果:

1 apple
2 banana
3 orange

上述代码中,我们使用了 enumerate() 函数获取了所有列表元素的下标和值,然后在循环语句中使用了这些值来实现一个简单的列表元素遍历。

### 4. 效率分析

与 range() 内置函数相比较,enumerate() 内置函数的效率略低,但是在需要同时遍历列表元素和它们的索引号时,enumerate() 函数比较方便,并且代码也更加简洁。

你可以通过以下方式计算 enumerator() 和 range() 函数的执行时间:

import time

list_of_numbers = [i for i in range(1, 1000000)]

start_time = time.time()
for index, value in enumerate(list_of_numbers):
    pass
print("--- enumerate() Execution Time ---", (time.time() - start_time), "seconds
")

start_time = time.time()
for i in range(len(list_of_numbers)):
    pass
print("--- range() Execution Time ---", (time.time() - start_time), "seconds
")

可以看到,在遍历列表时,enumerate() 函数的执行时间要稍微慢一些,但是由于其简单的代码和易于理解的语法,极大地提高了编写和阅读代码的效率。