如何提高Python中循环的性能

问题描述 投票:0回答:0

我有一个问题,我需要对一个大列表进行交互并找到第一个 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
python performance cython
© www.soinside.com 2019 - 2024. All rights reserved.