通过列表理解加速`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)
这只需要最短的时间来检索第一次出现
我正在使用 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)
这只需要最短的时间来检索第一次出现