Aprende Python · lección gratuita
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.
[expresión for elemento in iterable].[x for x in iterable if condición].{k: v for ...}.for con append (o asignación de clave).expresión puede transformar cada elemento, p. ej. x * 2 o x.upper().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}
# 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 variosif/elseanidados o pasos complejos, un buclefornormal será más claro que forzar todo en una línea.
| Forma | Sintaxis | Resultado |
|---|---|---|
| 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 |
---