Para sacar el promedio de una lista en Python, divide la suma de sus elementos entre la cantidad de elementos: sum(lista) / len(lista). Si prefieres una función con nombre, statistics.mean(lista) hace lo mismo y viene incluida en Python, sin instalar nada. Las dos fallan con una lista vacía, así que conviene revisarla antes.
Sintaxis
promedio = sum(lista) / len(lista)
import statistics
promedio = statistics.mean(lista)
| Forma | Devuelve | Con lista vacía | Cuándo usarla |
|---|---|---|---|
sum(x) / len(x) | Siempre float | ZeroDivisionError | Scripts rápidos, sin importar nada |
statistics.mean(x) | El tipo de los datos si el resultado es exacto (int, Fraction, Decimal) | StatisticsError | Código legible, datos Decimal o Fraction |
statistics.fmean(x) | Siempre float, más rápido | StatisticsError | Listas largas de números de punto flotante |
Paso a paso
- Reúne los números en una lista:
datos = [8, 9.5, 7]. Todos deben ser números, no textos. - Comprueba que la lista no esté vacía con
if datos:. - Suma con
sum(datos)y cuenta conlen(datos). - Divide la suma entre la cantidad con
/(no con//, que trunca el resultado). - Redondea solo para mostrar el resultado:
round(promedio, 2)of"{promedio:.2f}".
Ejemplos resueltos
Ejemplo 1: promedio de calificaciones
calificaciones = [8, 9.5, 7, 10, 6.5]
promedio = sum(calificaciones) / len(calificaciones)
print(promedio)
8.2
La suma es 41 y hay 5 calificaciones: 41 / 5 = 8.2. Con statistics.mean(calificaciones) obtienes el mismo 8.2.
Ejemplo 2: números escritos con coma decimal
Si los datos llegan como texto desde un formulario o un archivo de México o España, primero conviértelos a float. Python solo entiende el punto decimal, así que cambia la coma por punto:
texto = "8,5 9 7,25 10"
numeros = [float(t.replace(",", ".")) for t in texto.split()]
print(numeros)
print(sum(numeros) / len(numeros))
[8.5, 9.0, 7.25, 10.0]
8.6875
Si el texto usa punto como separador de miles (1.250,50), quita primero los puntos y después cambia la coma.
Ejemplo 3: valores de un diccionario y huecos con None
Con un diccionario, promedia sus valores; con datos faltantes marcados como None, fíltralos antes:
ventas = {"enero": 12500, "febrero": 9800, "marzo": 14100}
print(sum(ventas.values()) / len(ventas))
datos = [7, 8, None, 9]
validos = [x for x in datos if x is not None]
print(sum(validos) / len(validos))
12133.333333333334
8.0
Observa que el segundo promedio divide entre 3, no entre 4: el dato que falta no cuenta como cero. Si en tu caso un faltante sí vale cero (una tarea no entregada), reemplázalo por 0 en lugar de quitarlo.
Una función reutilizable
def promedio(valores):
if not valores:
return None
return sum(valores) / len(valores)
print(promedio([4, 5]))
print(promedio([]))
4.5
None
Devolver None obliga a quien llama a decidir qué hacer cuando no hay datos, en lugar de que el programa se detenga con una excepción.
Errores comunes
ZeroDivisionError: division by zero. La lista está vacía, a menudo porque un filtro no dejó ningún elemento. Constatistics.meanel error esStatisticsError: mean requires at least one data point.TypeError: unsupported operand type(s) for +: 'int' and 'str'. Algún elemento es texto ("8"en vez de8). Convierte confloat()al leer los datos.- Usar
//en lugar de/.//es división entera:41 // 5da 8, no 8.2. - Redondear antes de promediar. Redondea cada dato solo si la regla lo pide (por ejemplo, una boleta); si no, redondea al final para no acumular error. Lo explicamos en redondear el promedio en Python.
- Confundir el promedio con la mediana. Si hay valores extremos, como un sueldo muy alto, el promedio se mueve mucho; para eso existe la mediana en Python.
Si solo quieres comprobar un resultado sin programar, pega tus números en la calculadora de promedio de la portada, que también muestra la mediana y la moda.
Preguntas frecuentes
¿Python tiene una función average?
No como función integrada. Usa sum(lista) / len(lista), statistics.mean(lista) de la biblioteca estándar, o np.mean(lista) si ya trabajas con NumPy. np.average existe, pero su utilidad es el promedio ponderado.
¿Por qué statistics.mean([1, 2, 3]) devuelve 2 y no 2.0?
statistics.mean conserva el tipo de los datos cuando el resultado es exacto. Con enteros cuyo promedio es entero devuelve int; sum()/len() siempre devuelve float porque el operador / es división real.
Fuentes
- Python Software Foundation, documentación del módulo statistics. statistics.mean y StatisticsError. Consultado el 11 de noviembre de 2026.