Sum / Average an attribute of a list of objects
PythonListAttributesSumPython Problem Overview
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
Python Solutions
Solution 1 - Python
Use a http://docs.python.org/reference/expressions.html#generator-expressions">generator expression:
sum(c.a for c in c_list)
Solution 2 - Python
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])
Solution 3 - Python
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.
Solution 4 - Python
Use built-in statistics
module:
import statistics
statistics.mean((o.val for o in my_objs))