Lección 33 de 45 · Python intermedio

List comprehensions

Una comprehension no es un truco para escribir menos: es una forma compacta de expresar una transformación sencilla de una colección.

ListasComprimir / expandirFiltrar
Índice · Lección 33/45
No leas una comprehension como una frase rara de izquierda a derecha

Cuando veas [n * 2 for n in numeros if n > 0], empieza por el centro: «para cada n de numeros». Después mira el filtro y, al final, qué valor se produce.

Ese orden mental reduce mucho la sensación de sintaxis comprimida.

Evidencia de aprendizaje

Transformar un for + append en una comprehension y volver a expandirla mentalmente.

Una lista nueva puede nacer de transformar cada elemento

El mismo trabajo que un for, expresado como resultado
precios = [10, 20, 30]
con_iva = [precio * 1.21 for precio in precios]
print(con_iva)

Lee la línea como: «crea una lista con precio * 1.21 para cada precio que aparece en precios».

No hay magia nueva: ya conoces la lista, la expresión y el for. Solo están escritos en otra disposición.

El filtro decide quién entra antes de producir el resultado

Primero selecciona; después transforma
edades = [12, 19, 17, 25]
adultos = [edad for edad in edades if edad >= 18]
print(adultos)

El if del final no crea una rama como en un bloque tradicional: actúa como una puerta. Solo los elementos que cumplen la condición llegan a la lista resultante.

Antes de ejecutar: recorre mentalmente 12, 19, 17 y 25. Pregunta «¿pasa el filtro?» antes de pensar qué se añade.

Si necesitas explicar la línea con demasiadas pausas, vuelve a un for

Una comprehension con varios bucles, varias condiciones y una transformación larga puede ahorrar líneas y perder claridad. El objetivo no es producir el código más corto, sino que la transformación se entienda de un vistazo.

Un for explícito sigue siendo la opción correcta cuando necesitas varios pasos, trazas, manejo de errores o decisiones intermedias.

Comprime solo después de entender la versión larga

Versión explícita
cuadrados = []
for n in numeros:
    cuadrados.append(n * n)
Misma transformación
cuadrados = [n * n for n in numeros]

Lee la comprehension empezando por el for: «para cada n en números, guarda n * n».

Convierte el for + append en una comprehension equivalente. No cambies la salida.

Salida esperada
[1, 4, 9, 16]
comprehension.py
La salida aparecerá aquí.

Necesito una pista
  • La forma básica es [expresion for elemento in coleccion].
  • La expresión que se añadía con append era n * n.
Ver una solución razonada
numeros = [1, 2, 3, 4]
cuadrados = [n * n for n in numeros]
print(cuadrados)
Segundo paso

Si quisieras solo los cuadrados de números pares, primero piensa el filtro en versión larga (if n % 2 == 0) y después colócalo al final de la comprehension. Evita comprehensions anidadas mientras una versión explícita sea más clara.

La prueba de claridad: expándela mentalmente a tres pasos

  1. ¿De qué colección salen los elementos?
  2. ¿Hay una condición que descarte alguno?
  3. ¿Qué valor concreto se añade a la nueva lista?
Puedes avanzar cuando...

puedes traducir una comprehension corta a un for normal y volver a compactarla sin cambiar el resultado.