【问题标题】:How to speed up nested for-loop logic in Python with Pandas, Numpy?如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?
【发布时间】:2021-02-25 15:14:06
【问题描述】:

我想看看TestProject表的字段是否包含客户端传过来的参数,嵌套for循环很丑,有没有什么高效简单的实现方法?非常感谢您的任何建议。

def test(parameter_a: list, parameter_b: list) -> bool:
    age = TestPeople.age
    project_code = TestProject.project_code
    if age is not None and age <= 16:
        for code in project_code:
            for p in parameter_a:
                if code[:len(p)] == p:
                    return False
    return True

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    可以使用itertools.product 和all?

    from itertools import product
    
    def test(parameter_a: list, parameter_b: list) -> bool:
        age = TestPeople.age
        project_code = TestProject.project_code
        return (
            age is None 
            or age > 16
            or all(code.startswith(p) for code, p in product(project_code, parameter_a))
        )
    

    解释:

    这里python尝试使用short-circuit evaluation,所以会先检查是否age is None,如果是return True,否则检查age &gt; 16,如果是return True,否则检查all是否@ 987654332@对匹配条件code.startswith(p),如果所有对都满足条件,return True,否则如果其中任何一个对失败,则立即return False而不检查其余的。

    【讨论】:

    • code.startswith(p) 比将p 与切片进行比较更干净,而且可能更快。
    • 如果条件为假,你仍然需要返回True,这可以通过单个表达式return age is None or age &gt; 16 or all(...)来完成。
    • (当我看到你弹出的答案时,我正在写基本相同的答案。:))
    • @chepner 谢谢,忘了第一个 if 检查。
    • @SayanipDutta 非常感谢,再次确认,不需要return True,真的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多