Comprensión de listas

Cuatro líneas convertidas en una. Es lo que hace que el código de Python se vea como se ve.

Supongamos que quieres una lista con el doble de cada número. Con lo que sabes lo harías así, y está perfecto:

Cuatro líneas para algo muy simple: "para cada número, guarda su doble". Python tiene una forma de escribir exactamente esa frase.

dobles = [ n * 2   for n in numeros ]
             ↑           ↑
        qué guardar   de dónde sacarlo

Se lee de derecha a izquierda: "para cada n en numeros… guarda n por 2". Los corchetes indican que el resultado es una lista.

Acá se pone realmente útil: puedes agregar un if al final para quedarte solo con algunos.

Si en vez de corchetes usas llaves y pones clave: valor, obtienes un diccionario.

Acá va la advertencia, porque es fácil pasarse. Las comprensiones son geniales cuando caben cómodas en una línea y se leen como una frase.

Cuando la lógica se complica, un bucle normal es mejor. Compara:

r = [x*2 if x%2==0 else x*3 for y in datos for x in y if x>0 and x<100]

Eso técnicamente funciona, pero nadie lo entiende — incluido tú dentro de dos semanas. Si te pasa, vuelve al bucle de toda la vida.

La regla: si tienes que detenerte a descifrarla, escríbela larga.

Convertir un bucle en una línea, filtrar con if, hacer lo mismo con diccionarios, y cuándo conviene no hacerlo.

Esta es la sintaxis que hace que el código de Python se reconozca a simple vista. Cuando la empieces a usar sin pensarlo, ya te acostumbraste al lenguaje.