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

Respuestas:


182

Usa una expresión generadora :

sum(c.a for c in c_list)

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])

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.


0

Utilice el statisticsmódulo integrado :

import statistics

statistics.mean((o.val for o in my_objs))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.