Быстрое манипулирование вложенными циклами в Python - PullRequest
0 голосов
/ 15 января 2020

У меня есть 3 класса: группа, клиент, продукт. Каждая группа содержит список клиентов [C1, C2, C3, ...], а каждый клиент содержит список продуктов, которые он хочет купить [P1, P2, P3, ...]. На верхнем уровне я хочу сделать различные агрегации, например, сколько стоит общий заказ. В итоге я получаю вложенные циклы, которые очень медленные, так как количество групп, клиентов и продуктов увеличивается

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

Что бы вы посоветовали с точки зрения структурирования кода, чтобы сделать его намного быстрее?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Насколько велики эти группы и c? Я был бы удивлен, если бы эти операции были bottle шеей. Собираетесь ли вы в дб в ваших циклах?

Вместо этого вы можете использовать списочные выражения, но я не уверен, что это вам что-нибудь даст.

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

0 голосов
/ 15 января 2020

В python вы должны избегать циклов как можно больше по многим причинам. Даже в терминологии машинного обучения (нейронных сетей) лучше использовать векторизацию, а не явную для циклов. В вашем случае я предлагаю использовать " map ", как это на самом деле для l oop написано в C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...