使用列表理解加速“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)
上面的代码打印了10 秒,尽管它可能会在 first 之后中断迭代True。
回答
使用generator expression代替list comprehension来避免首先形成列表:
result = any(f(x) == 0 for x in [0,1,3,5,7])
(列表理解的方括号不见了)
请注意,any在任何一种情况下都有短路行为,但不同的是缺乏形成整个列表。