如何解决使用列表理解加速“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 秒,尽管它可能会在第一个 True
之后中断迭代。
解决方法
使用 generator expression
而不是 list comprehension
以避免首先形成列表:
result = any(f(x) == 0 for x in [0,1,3,5,7])
(列表推导式的方括号不见了)
请注意,any
在任何一种情况下都具有短路行为,但不同的是没有形成整个列表。
您可以使用生成器,正如 Mustafa 所说,但只检索真理的第一个元素。 非必要的生成器必须全部消耗掉,剩下的交给海象算子
import time
def f(x):
time.sleep(2)
return x
beginTime = time.time()
result = next((wr for x in [0,7] if (wr := f(x)) ==0))
endTime = time.time()
print(endTime - beginTime)
这只需最少的时间来检索第一次出现
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。