使用列表理解加速“any”

The*_*kal 1 python performance list-comprehension any

我正在使用any列表理解。我想在any返回时打破列表理解True。例如,

import time

def f(x):
    time.sleep(2)
    return x

beginTime = time.time()
result = any([f(x) == 0 for x in [0,1,3,5,7]])
endTime = time.time()

print(endTime - beginTime)
Run Code Online (Sandbox Code Playgroud)

上面的代码打印了10 秒,尽管它可能会在 first 之后中断迭代True

Mus*_*dın 11

使用generator expression代替list comprehension来避免首先形成列表:

result = any(f(x) == 0 for x in [0,1,3,5,7])
Run Code Online (Sandbox Code Playgroud)

(列表理解的方括号不见了)

请注意,any在任何一种情况下都有短路行为,但不同的是缺乏形成整个列表。