Summe / Durchschnitt eines Attributs einer Liste von Objekten

80

Nehmen wir an, ich habe eine Klasse Cmit Attributen a.

Was ist der beste Weg, um die Summe aaus einer Liste von Cin Python zu erhalten?


Ich habe den folgenden Code ausprobiert, aber ich weiß, dass dies nicht der richtige Weg ist:

for c in c_list:
    total += c.a
jsj
quelle

Antworten:

178

Verwenden Sie einen Generatorausdruck :

sum(c.a for c in c_list)
Phihag
quelle
Ich mag die Einfachheit, aber es scheint wieder halb so lange zu dauern wie (c1.A + c2.A + c3.A) für ungefähr 10 Elemente, wobei cA ein Float ist.
jcomeau_ictx
8

Wenn Sie nach anderen Maßen als der Summe suchen, z. B. Mittelwert / Standardabweichung, können Sie NumPy verwenden und Folgendes tun:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
Heribert
quelle
4

Ich hatte eine ähnliche Aufgabe, aber meine bestand darin, eine Zeitdauer als Ihr Attribut zu summieren c.a. Ich kombinierte dies mit einer anderen Frage, die hier gestellt wurde

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

Weil, wie im Link erwähnt, sumein Startwert benötigt wird.

Bill Kidd
quelle
0

Verwenden Sie das eingebaute statisticsModul:

import statistics

statistics.mean((o.val for o in my_objs))
Shital Shah
quelle