Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

La Prensa Industrial (Comprehensions)

Motor de Comprehension: prensa industrial que transforma y filtra elementos de una colección en una sola expresión

Fig. 8.5: Una comprehension transforma y filtra en una sola expresión.

Ya conoces la Línea de Ensamblaje (for): detiene cada caja, le hace lo que haga falta, la coloca y sigue con la siguiente. Para trabajos de varios pasos es imbatible. Pero cuando la tarea es una sola operación repetida (aplicarle el IVA a cada precio, sacar cada nombre en mayúsculas), montar toda la línea es demasiado aparato. Para eso el almacén tiene otra máquina: la Prensa Industrial. Metes la colección completa, defines el troquel, y la lista nueva sale de un solo golpe.

Sintaxis de la Prensa

La fórmula que comprime tres líneas en una sola:

# [ NUEVO_VALOR   for   VARIABLE   in   ORIGINAL ]

Comparación de Estilos

Con la línea de ensamblaje (for):

precios = [100, 250, 80]
con_iva = []
for precio in precios:
    con_iva.append(precio * 1.16)

Con la prensa (comprehension):

precios = [100, 250, 80]
con_iva = [precio * 1.16 for precio in precios]

Mismo resultado, una fracción del esfuerzo. El troquel es la expresión de la izquierda (precio * 1.16); la prensa lo aplica a cada elemento sin que tú administres la lista vacía ni el .append().

Filtrado en la Prensa

La prensa también acepta un selector. Añade un if al final y el troquel solo procesa las piezas que cumplen la condición; el resto ni entra a la máquina.

stocks = [12, 0, 45, 3]
requieren_pedido = [s for s in stocks if s < 5]
print(requieren_pedido)  # [0, 3]

¿Prensa o línea de ensamblaje?

La regla del taller: la prensa troquela una operación por pieza; la línea admite pasos arbitrarios (contadores, avisos, condiciones anidadas). Usa la comprehension cuando la transformación sea directa y quepa cómoda en una línea; si la lógica se complica, un for explícito es más honesto. Lo elegante, compacto y abiertamente “pythónico” no sirve de nada si quien lee no entiende qué salió de la prensa.


Resumen del Capítulo

  • El bucle for recorre listas, diccionarios (.keys(), .values(), .items()) y cadenas; range() genera secuencias numéricas sin construir una lista completa.
  • enumerate() entrega índice y elemento a la vez; zip() empareja dos colecciones para recorrerlas juntas.
  • El bucle while repite mientras una condición sea cierta; algo dentro del cuerpo debe cambiar esa condición o el bucle nunca termina.
  • while True combinado con break es el patrón estándar cuando no sabes de antemano cuántas vueltas hacen falta (el motor de un menú).
  • break detiene el bucle por completo; continue salta solo la vuelta actual y sigue con la siguiente.
  • Los Patrones Comunes (acumulador, contador, bandera, filtrado, récord) resuelven la mayoría de las tareas de recorrido; varios ya vienen hechos como sum(), len(), max(), min().
  • La Prensa Industrial (Comprehensions) ([expresión for elemento in coleccion if condición]) troquela una lista nueva en una sola expresión, cuando la transformación es directa.