给定一个输入列表(假设它们只是整数)和一个函数列表(这些函数接受一个整数,并返回 True 或 False)。
我必须获取这个输入列表,并查看列表中的任何函数是否会为列表中的任何值返回 True。
有什么方法可以比 O(n^2) 更快
我现在有的是
for v in values:
for f in functions:
if f(v):
# do something to v
break
有什么更快的方法吗?
最佳答案
没有关于函数的任何进一步信息,len(functions) * len(values)
可能的函数调用的结果必须被认为是相互独立的,所以没有比检查更快的方法他们都是。
不过,您可以将其写得更简洁一些:
any(f(v) for v in values for f in functions)
内置函数 any()
也会短路,就像您的原始代码一样。
编辑:事实证明,所需的等价物是
all(any(f(v) for f in functions) for v in values)
查看评论以进行讨论。
关于python - 搜索算法但针对函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10737986/