Suma / Promedio de un atributo de una lista de objetos

82

Digamos que tengo una clase Cque tiene atributo a.

¿Cuál es la mejor manera de obtener la suma de auna lista de Cen Python?


Probé el siguiente código, pero sé que no es la forma correcta de hacerlo:

for c in c_list:
    total += c.a
jsj
fuente

Respuestas:

182

Usa una expresión generadora :

sum(c.a for c in c_list)
Phihag
fuente
Me gusta la simplicidad, pero parece que toma la mitad de tiempo que (c1.A + c2.A + c3.A) para aproximadamente 10 elementos donde cA es un flotador.
jcomeau_ictx
9

Si está buscando otras medidas además de la suma, por ejemplo, media / desviación estándar, puede usar NumPy y hacer:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])
Heribert
fuente
4

Tenía una tarea similar, pero la mía consistía en sumar una duración de tiempo como atributo c.a. Combinando esto con otra pregunta formulada aquí , se me ocurrió

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

Porque, como se menciona en el enlace, sumnecesita un valor inicial.

Bill Kidd
fuente
0

Utilice el statisticsmódulo integrado :

import statistics

statistics.mean((o.val for o in my_objs))
Shital Shah
fuente