Python中的enumerate函数详解,助你轻松遍历列表!
在 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() 函数的执行时间要稍微慢一些,但是由于其简单的代码和易于理解的语法,极大地提高了编写和阅读代码的效率。
