Sum / Average an attribute of a list of objects

Question:

Lets say I have class C which has attribute a.

What is the best way to get the sum of a from a list of C in Python?


I’ve tried the following code, but I know that’s not the right way to do it:

for c in c_list:
    total += c.a
Asked By: jsj

||

Answers:

Use a generator expression:

sum(c.a for c in c_list)
Answered By: phihag

I had a similar task, but mine involved summing a time duration as your attribute c.a.
Combining this with another question asked here, I came up with

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

Because, as mentioned in the link, sum needs a starting value.

Answered By: Bill Kidd

If you are looking for other measures than sum, e.g. mean/standard deviation, you can use NumPy and do:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
Answered By: Heribert

Use built-in statistics module:

import statistics

statistics.mean((o.val for o in my_objs))
Answered By: Shital Shah
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.