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.
Transformar un for + append en una comprehension y volver a expandirla mentalmente.
Una lista nueva puede nacer de transformar cada elemento
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
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
cuadrados = []
for n in numeros:
cuadrados.append(n * 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.
[1, 4, 9, 16]
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)
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
- ¿De qué colección salen los elementos?
- ¿Hay una condición que descarte alguno?
- ¿Qué valor concreto se añade a la nueva lista?
puedes traducir una comprehension corta a un for normal y volver a compactarla sin cambiar el resultado.