使用 List Comprehensions 在Python中减少执行时间
先决条件:对Python的理解
大多数使用Python编写代码的竞争性程序员经常面临在给定时间限制内执行程序的困难。 List Comprehensions 帮助我们减少您需要根据任何数学表达式创建列表的程序的执行时间。我们将考虑一个例子来证明上述陈述。
示例:要形成一个直到 10**7 的所有偶数的列表,我们可以通过以下方式进行
方法一:
%%timeit -n 100
even =[ ]
for i in range(10**7):
if i % 2 == 0:
even.append(i)
输出:
方法二:
%%timeit -n 100
even =[i for i in range(10**7) if i % 2 == 0]
输出:
我们可以看到上述两个程序在运行时间上的差异,当我们增加范围时,这种差异也会增加,当数学表达式有点复杂时也是如此。当这些类型的列表是一个非常大的程序的一部分时,这个时间差很重要。
注意:使用 Jupyter Notebook 中提供的%%timeit
工具,它重复执行我们指定的多次相同的单元格,并返回执行给定程序所用的平均/平均时间。
以下是检查上述程序执行时间的Python 3 代码片段,
import time
# Using for loop
start = time.time()
a =[ ]
for i in range(10**7):
if i % 2 == 0:
a.append(i)
print("Execution time = ", time.time()-start)
# Using list comprehension
start = time.time()
a =[i for i in range(10**7) if i % 2 == 0]
print("Execution time = ", time.time()-start)
输出:
Execution time = 1.558159589767456
Execution time = 0.9690220355987549