Сумма / Среднее значение атрибута списка объектов

82

Допустим, у меня есть класс Cс атрибутом a.

Как лучше всего получить сумму aиз списка Cв Python?


Я пробовал следующий код, но знаю, что это неправильный способ:

for c in c_list:
    total += c.a
jsj
источник

Ответы:

182

Используйте выражение генератора :

sum(c.a for c in c_list)
Phihag
источник
Мне нравится простота, но, похоже, она занимает вдвое меньше времени (c1.A + c2.A + c3.A) примерно для 10 элементов, где cA - это число с плавающей запятой.
jcomeau_ictx 06
9

Если вы ищете другие меры, кроме суммы, например среднее / стандартное отклонение, вы можете использовать NumPy и сделать:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
Heribert
источник
4

У меня была аналогичная задача, но моя заключалась в суммировании продолжительности времени в качестве вашего атрибута c.a. Объединив это с другим заданным здесь вопросом , я придумал

sum((c.a for c in cList), timedelta())

Потому что, как указано в ссылке, sumтребуется начальное значение.

Билл Кидд
источник
0

Используйте встроенный statisticsмодуль:

import statistics

statistics.mean((o.val for o in my_objs))
Шитал Шах
источник