通过列表理解加速`any`

Speeding up `any` with list comprehension

我正在使用 any 和列表理解。我想在 any returns 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 秒,尽管它可能会在第一个 True.

之后中断迭代

使用 generator expression 而不是 list comprehension 以避免首先形成列表:

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

(list comprehension的方括号没了)

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

您可以使用生成器,如 Mustafa 所说,但只检索真实的第一个元素。 不必要的发电机必须完全消耗,剩下的海象运算符

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

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

print(endTime - beginTime)

这只需要最短的时间来检索第一次出现