Suma / Średnia atrybut listy obiektów

82

Powiedzmy, że mam klasę, Cktóra ma atrybut a.

Jaki jest najlepszy sposób, aby uzyskać sumę az listy Cw Pythonie?


Wypróbowałem następujący kod, ale wiem, że to nie jest właściwy sposób:

for c in c_list:
    total += c.a
jsj
źródło

Odpowiedzi:

182

Użyj wyrażenia generatora :

sum(c.a for c in c_list)
phihag
źródło
Podoba mi się prostota, ale wydaje mi się, że zajmuje to połowę tak długo, jak (c1.A + c2.A + c3.A) dla około 10 elementów, gdzie cA to float.
jcomeau_ictx
9

Jeśli szukasz innych miar niż suma, np. Średnia / odchylenie standardowe, możesz użyć NumPy i zrobić:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
Heribert
źródło
4

Miałem podobne zadanie, ale moje polegało na zsumowaniu czasu trwania jako twojego atrybutu c.a. Łącząc to z innym zadanym tutaj pytaniem , wymyśliłem

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

Ponieważ, jak wspomniano w linku, sumpotrzebuje wartości początkowej.

Bill Kidd
źródło
0

Użyj wbudowanego statisticsmodułu:

import statistics

statistics.mean((o.val for o in my_objs))
Shital Shah
źródło