569 votos

Encontrar el promedio de una lista

Tengo que encontrar el promedio de una lista en Python. Este es mi código hasta ahora

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)

Lo tengo para que sume los valores de la lista, pero no sé cómo hacer que se divida en ellos...

51 votos

Numpy.mean si puedes permitirte instalar numpy

8 votos

sum(L) / float(len(L)) . manejar las listas vacías en el código de llamada como if not L: ...

0 votos

Por favor actualiza tu post y quita reduce y lambda porque la gente está copiando esto de arriba para malos casos de uso. (bueno, a menos que tengas una razón de peso para usarlos).

698voto

Herms Puntos 13069

Si tu reducción ya está devolviendo tu suma, entonces todo lo que te queda por hacer es dividir.

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l) / len(l)

aunque sum(l)/len(l) sería más simple, ya que no necesitarías una lambda.

Si quieres un resultado float más exacto en lugar de un int, entonces usa float(len(l)) en lugar de len(l) .

0 votos

Es perfecto, perdón por la pregunta estúpida, pero lo he buscado por todas partes, ¡muchas gracias!

7 votos

Como he dicho, soy nuevo en esto, estaba pensando que tendría que hacerlo con un bucle o algo para contar la cantidad de números en él, no me di cuenta de que podía simplemente utilizar la longitud. esta es la primera cosa que he hecho con Python..

0 votos

@CarlaDessi: ¿Qué tutorial estás utilizando? Esto se trata a fondo en todos los tutoriales que he visto. Está claro que has encontrado un tutorial que no lo cubre bien. ¿Qué tutorial estás usando para aprender Python?

557voto

Yuri Prezument Puntos 2745
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / len(l)

30 votos

Como programador de C++, eso es muy limpio y el flotador no es nada feo.

2 votos

Si quieres reducir algunos números después del punto decimal. Esto puede ser útil: float('%.2f' % float(sum(l) / len(l)))

2 votos

@Steinfeld No creo que la conversión a cadena sea el mejor camino a seguir aquí. Puedes conseguir lo mismo de una forma más limpia con round(result, 2) .

304voto

Akavall Puntos 7357

O podrías usar el numpy:

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

import numpy as np
print np.mean(l)

5 votos

Es extraño. Habría supuesto que esto sería mucho más eficiente, pero parece que tarda 8 veces más en una lista aleatoria de flotantes que simplemente sum(l)/len(l)

9 votos

Oh, pero np.array(l).mean() es mucho más rápido.

9 votos

@L.AmberO'Hearn, acabo de cronometrarlo y np.mean(l) y np.array(l).mean son aproximadamente de la misma velocidad, y sum(l)/len(l) es aproximadamente el doble de rápido. He utilizado l = list(np.random.rand(1000)) por supuesto ambos numpy Los métodos se vuelven mucho más rápidos si l es numpy.array .

238voto

Marwan Alsabbagh Puntos 4245

Un módulo estadísticas ha sido añadido a Python 3.4 . Tiene una función para calcular el promedio llamado mean . Un ejemplo con la lista que usted proporcionó sería:

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)

29 votos

Esta es la respuesta más elegante porque emplea un módulo de la biblioteca estándar que está disponible desde Python 3.4.

4 votos

Y es numéricamente más estable

0 votos

Y produce un error más agradable si accidentalmente pasas una lista vacía statistics.StatisticsError: mean requires at least one data point en lugar de una más críptica ZeroDivisionError: division by zero para el sum(x) / len(x) solución.

48voto

kindall Puntos 60645

¿Por qué usarías reduce() para esto cuando Python tiene un perfectamente cromulento sum() ¿funcionar?

print sum(l) / float(len(l))

(El float() es necesario para obligar a Python a hacer una división en punto flotante).

35 votos

Para los que somos nuevos en la palabra cromulento

1 votos

float() no es necesario en Python 3.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X