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
Answers:
Use a generator expression:
sum(c.a for c in c_list)
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.
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])
Use built-in statistics
module:
import statistics
statistics.mean((o.val for o in my_objs))
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
Use a generator expression:
sum(c.a for c in c_list)
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.
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])
Use built-in statistics
module:
import statistics
statistics.mean((o.val for o in my_objs))