【问题标题】:Fast manipulation of nested loops in Python在 Python 中快速操作嵌套循环
【发布时间】:2020-01-15 07:28:07
【问题描述】:

我有 3 个类:Group、Customer、Product。每个组包含一个客户列表 [C1, C2, C3,...],每个客户包含一个他想要购买的产品列表 [P1,P2,P3,...]。在顶层,我想做各种聚合,例如总订单值多少钱。随着组、客户和产品数量的增加,我最终会遇到非常慢的嵌套循环

total_order = 0
for customer in group:
    for product in customer:
        total_order += product.price * product.amount

在构建代码以使其更快的方面,您有什么建议?

【问题讨论】:

    标签: python-3.x loops


    【解决方案1】:

    这些团体有多大?如果这些操作是瓶颈,我会感到惊讶。您要在循环中使用数据库吗?

    您可以改用列表推导式,但我不确定它能给您带来什么。

    total_order = sum(p.price * p.amount for c in group for p in c)

    【讨论】:

    • 任何组可以包含 100 个客户,最多 200 个产品
    • @pam 我相当有信心您正在循环中执行其他导致问题的操作 - 如果我模拟您的数据 (100 * 200),我可以在 1.82 毫秒内完成操作。也许您正在使用从数据库中悄悄加载数据的 ORM?你在使用数据库吗?
    【解决方案2】:

    在 python 中,您必须尽可能避免 for 循环,原因有很多。 即使在机器学习(神经网络)术语中,最好使用向量化而不是显式的 for 循环。 在您的情况下,我建议使用“map”,因为它实际上是用 C 编写的循环。

    【讨论】:

    • 我从来没有听说过这个。你能指出一个资源吗?
    • 我给了你“地图”中的链接,点击它,你将被重定向到python原始页面。对于矢量化,它是以下链接:
    • 对,但它并没有说使用 map 代替 for 循环。我知道什么是矢量化,尽管它增加了一层通常不需要的复杂性。我从来没有听过有人说你不应该在 python 中使用 for 循环。这绝对不是这里的问题。
    • @AidanKane 请看看这个。 stackoverflow.com/questions/8097408/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2021-04-27
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多