Sum / Average atrybut listy obiektów

Powiedzmy, że mam klasę C, która ma atrybut a.

Jaki jest najlepszy sposób na uzyskanie Sumy a z listy C w Pythonie?


Próbowałem poniższego kodu, ale wiem, że to nie jest dobry sposób, aby to zrobić:

for c in c_list:
    total += c.a
Author: Georgy, 2012-06-04

4 answers

Użyj wyrażenia generatora :

sum(c.a for c in c_list)
 187
Author: phihag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-20 14:17:28

Jeśli szukasz innych miar niż suma, np. średnia / odchylenie standardowe, możesz użyć NumPy i zrobić:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
 9
Author: Heribert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-20 14:18:26

Miałem podobne zadanie, ale moje polegało na podsumowaniu czasu jako twojego atrybutu c.a. Łącząc to z innym pytaniem zadanym tutaj , wymyśliłem

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

Ponieważ, jak wspomniano w linku, sum potrzebuje wartości początkowej.

 4
Author: Bill Kidd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-20 14:18:02

Użyj wbudowanego modułu statistics:

import statistics

statistics.mean((o.val for o in my_objs))
 0
Author: Shital Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-24 19:27:27