Aprende Python · lección gratuita

Lección 17 · Comprehensions

Resumen

Las comprehensions son una forma compacta y elegante de crear listas y diccionarios a partir de secuencias existentes, todo en una sola línea. En lugar de escribir un bucle for con append, describes directamente qué quieres construir. Son una de las características más queridas de Python por su legibilidad y concisión.

Conceptos

Imagina que quieres una lista con los cuadrados de los números del 0 al 4. Con un bucle clásico escribirías una lista vacía y un for con append. Una list comprehension hace lo mismo de forma más directa: pones primero la expresión que quieres guardar y luego el for que recorre el iterable.

# Con bucle for tradicional
cuadrados = []
for x in range(5):
    cuadrados.append(x ** 2)

# Con list comprehension (equivalente)
cuadrados = [x ** 2 for x in range(5)]
print(cuadrados)  # [0, 1, 4, 9, 16]

Puedes añadir un if al final para filtrar qué elementos entran. Y con un dict comprehension construyes diccionarios igual de fácil, indicando un par clave: valor. La estructura siempre es la misma: primero qué generar, luego de dónde sacarlo, y opcionalmente bajo qué condición.

# Filtrar solo los pares
pares = [x for x in range(10) if x % 2 == 0]
print(pares)  # [0, 2, 4, 6, 8]

# Dict comprehension: número -> su cuadrado
cuadrados_dict = {x: x ** 2 for x in range(4)}
print(cuadrados_dict)  # {0: 0, 1: 1, 2: 4, 3: 9}

Ejemplos

# 1) Transformar: pasar palabras a mayúsculas
palabras = ["sol", "luna", "mar"]
mayus = [p.upper() for p in palabras]
print(mayus)  # ['SOL', 'LUNA', 'MAR']

# 2) Filtrar: quedarse con números mayores a 3
nums = [1, 5, 2, 8, 3]
grandes = [n for n in nums if n > 3]
print(grandes)  # [5, 8]

# 3) Transformar y filtrar a la vez: doble de los pares
dobles = [n * 2 for n in range(6) if n % 2 == 0]
print(dobles)  # [0, 4, 8]

# 4) Dict comprehension: longitud de cada palabra
longitudes = {p: len(p) for p in palabras}
print(longitudes)  # {'sol': 3, 'luna': 4, 'mar': 3}
💡 Usa comprehensions para lógica simple y legible. Si necesitas varios if/else anidados o pasos complejos, un bucle for normal será más claro que forzar todo en una línea.

Cheatsheet

FormaSintaxisResultado
List comprehension[x for x in iterable]lista
Con transformación[x * 2 for x in iterable]lista transformada
Con filtro[x for x in iterable if cond]lista filtrada
Transformar + filtrar[x*2 for x in iterable if cond]lista
Dict comprehension{k: v for k in iterable}diccionario
Dict con filtro{k: v for k in it if cond}diccionario filtrado

---

← Conjuntos (sets)Definir funciones: def y return →

Ver todas las lecciones de Aprende Python →