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

Antworten:


178

Verwenden Sie einen Generatorausdruck :

sum(c.a for c in c_list)

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])

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.


0

Verwenden Sie das eingebaute statisticsModul:

import statistics

statistics.mean((o.val for o in my_objs))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.