如何提升Python中查找首个符合条件元素的循环性能
提升Python列表首个符合条件元素查找的for循环性能
我现在遇到一个问题:需要遍历一个大列表,找到第一个满足条件的元素。用filter加list的方式虽然会遍历整个列表,但执行效率反而更高;而传统for循环找到符合条件的元素就返回,逻辑上更高效,但实际执行速度却没优势,两者耗时几乎相同。
示例代码
传统for循环(找到即返回)
def for_first_true_1(l_list, string): for x in l_list: # 实际可能是更复杂的逻辑 if string in x: return True return False
这个实现逻辑上更高效,但执行速度偏慢。
filter+list实现(遍历全列表)
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个元素,基于原始代码的测试数据如下:
# 对应for_first_true_2的测试结果 RUNNING TIME: 0.0005581378936767578 909 function calls (906 primitive calls) # 对应for_first_true_1的测试结果 RUNNING TIME: 0.0004608631134033203 264 function calls (261 primitive calls)
两者耗时几乎一致。
我的疑问与尝试
我想知道怎么提升上述for循环的性能?
我考虑过的替代方案:
- Cython实现:但不知道具体怎么写。现有一个通用的循环函数和字符串列表,示例代码如下:
期望实现的调用逻辑如下:def bool_for_loop(func, ll: list, arg: str) -> bool: value = False for x in ll: value = func(x, arg) if value: return True return Falsedef for_first_true_cython(l_list, string: str): def has_string(x): if string in x: return True else: return False return bool_for_loop(has_string, l_list) - 另外,我试过用
any函数,但优化效果不理想。
内容的提问来源于stack exchange,提问作者DevBush
相关产品推荐
相关产品推荐

