我有一个问题,我需要对一个大列表进行交互并找到第一个 True 条件,如果我使用过滤器和列表内置函数,它会更快,但必须完成迭代,或者我使用可以返回的传统“for”在第一个 True 条件下。 但它几乎有相同的时间来完成,这里有一些例子。
def for_first_true_1(l_list, string):
for x in l_list:
# may be a more complex logic
if string in x:
return True
return False
上面的例子执行时间较慢,但逻辑较快
def for_first_true_2(l_list, string):
def has_string(x):
if string in x:
return True
else:
return False
value = list(filter(has_string, l_list))
return bool(value)
上面的示例一旦必须迭代整个列表就会有更多的调用,但效率更高。
结果是两者几乎有相同的时间完成。
列表大约有 100 个元素 下面的结果基于我无法公开的原始代码:
# equivalent of for_first_true_2
RUNNING TIME: 0.0005581378936767578
909 function calls (906 primitive calls)
# equivalent of for_first_true_1
RUNNING TIME: 0.0004608631134033203
264 function calls (261 primitive calls)
如何提高 for 循环的性能?
我有什么替代方案?
1 - 构建 cython 操作,但我不知道如何:
def bool_for_loop(func, ll: list, arg) -> bool:
value = False
for x in ll:
value = func(x, arg)
if value:
return True
return False