enumerate是python的内置函数,可以快速得到一个可迭代元素中的下标和对应的元素,返回一个枚举对象,enumerate第一个参数是可迭代对象,第二个参数指定索引起始值,默认从0开始
a = [1,2,3,4,5]
for index, value in enumerate(a):
print(f"{index}: {value}")
for index, value in enumerate(a, 10):
print(f"{index}: {value}")
输出:
0: 1
1: 2
2: 3
3: 4
4: 5
10: 1
11: 2
12: 3
13: 4
14: 5
enumerate的实现是通过迭代器的方式生成的,具体实现方式可以参考以下代码:
def enumerate(iterable, start=0):
for value in iterable:
yield start, value
start += 1
以前写代码的一个毛病:通过len(iterable)得出一个可迭代对象的长度,再用range函数进行for循环,通过下标取到对应的值,尤其是在双重循环的时候内层循环用到外层循环的值时这种用法更为明显,完全可以使用enumerate显得更加美观,举个例子:
以前的写法:
import time
a = [0] * 1000 + [1]
b = [0] * 10000
count = 0
start = time.time()
for i in range(len(a)):
for j in range(len(b)):
count += 1
if a[i] > b[j]:
print("yes")
break
end = time.time()
print(end-start)
print(count)
输出:
yes
2.8632888793945312
10000001
现在的写法:
import time
a = [0] * 1000 + [1]
b = [0] * 10000
count = 0
start = time.time()
for index_a, value_a in enumerate(a):
for index_b, value_b in enumerate(b):
count += 1
if value_a > value_b:
print("yes")
break
end = time.time()
print(end-start)
print(count)
输出:
yes
2.0301051139831543
10000001
同样是一千万次循环,虽然第二种方式的代码量没有减少,但是执行时间变少了,效率就相应提高了