Crear listas en Python puede ser mucho más rápido y expresivo de lo que imaginas. Las compression lists (también conocidas como list comprehensions) permiten construir listas completas en una sola línea de código, reemplazando bucles largos y condiciones que dificultan la lectura. A continuación se explican sus fundamentos, su sintaxis y ejemplos prácticos que van desde operaciones matemáticas hasta el manejo de matrices.
¿Qué son las compression lists y cómo funcionan?
Una compression list es una forma concisa de generar listas en Python. En lugar de escribir un bucle for, crear una lista vacía y usar append, todo se resuelve dentro de un par de corchetes. La estructura básica es:
python
nueva_lista = [expresión for variable in iterable]
- Expresión: la operación que se aplica a cada elemento.
- Variable: el nombre temporal que toma cada elemento durante la iteración.
- Iterable: la secuencia de datos sobre la que se recorre (un
range, una lista, etc.).
Esta sintaxis reduce el tiempo de ejecución y el número de líneas, haciendo el código más legible y elegante.
¿Cómo calcular números al cuadrado con una sola línea?
El primer ejemplo consiste en obtener los cuadrados de los números del uno al diez [0:55]. Se escribe así:
python
squared_numbers = [x ** 2 for x in range(1, 11)]
print("Los cuadrados son:", squared_numbers)
Aquí x ** 2 es la expresión que se aplica a cada valor de x dentro del rango. El resultado es una lista con los valores 1, 4, 9, 16… hasta 100. Si se quisiera obtener el cubo, bastaría con cambiar el exponente a x ** 3 [2:07].
¿Cómo convertir grados Celsius a Fahrenheit?
También es posible aplicar fórmulas más complejas a cada elemento. Para transformar una lista de temperaturas en Celsius a Fahrenheit [2:25] se usa la fórmula clásica: multiplicar por 9/5 y sumar 32.
python
celsius = [0, 10, 20, 30, 40]
fahrenheit = [temp * (9/5) + 32 for temp in celsius]
print("Temperatura en grados Fahrenheit:", fahrenheit)
Cada valor de la lista celsius pasa por la expresión y el resultado se almacena directamente en fahrenheit.
¿Cómo filtrar datos con if dentro de una compression list?
Las compression lists también admiten condiciones. La sintaxis cuando se combina for e if es:
python
nueva_lista = [expresión for variable in iterable if condición]
Para hallar los números pares del uno al veinte [3:55] se utiliza el operador módulo (%). Si x % 2 == 0, el número es par y se incluye en la lista:
python
pares = [x for x in range(1, 21) if x % 2 == 0]
print(pares)
La lectura se hace de derecha a izquierda en la lógica: "por cada valor de x en el rango de 1 a 20, si x módulo 2 es igual a cero, entonces se añade a la lista". Para obtener los impares basta cambiar la condición a x % 2 != 0 [5:00].
¿Cómo trabajar con matrices usando compression lists?
Una operación frecuente en álgebra lineal es obtener la transpuesta de una matriz, que consiste en intercambiar filas por columnas [5:20]. Con compression lists anidadas se resuelve en una línea:
python
matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transpuesta = [[fila[i] for fila in matriz] for i in range(len(matriz[0]))]
print("Matriz:", matriz)
print("Transpuesta:", transpuesta)
- El
range(len(matriz[0])) genera los índices de columna (0, 1, 2).
- Para cada índice
i, se recorre cada fila de la matriz y se extrae el elemento en la posición i.
- El resultado: la primera columna
[1, 4, 7] se convierte en la primera fila, y así sucesivamente [7:08].
¿Cuántas líneas ahorra respecto al método tradicional?
Sin compression list, el mismo ejercicio requiere seis líneas de código [8:10]:
python
transpuesta = []
for i in range(len(matriz[0])):
fila_nueva = []
for fila in matriz:
fila_nueva.append(fila[i])
transpuesta.append(fila_nueva)
Ambos enfoques producen exactamente el mismo resultado, pero la versión con list comprehension es más compacta y fácil de mantener. Para operaciones avanzadas con matrices, el módulo NumPy ofrece funciones optimizadas que simplifican aún más este tipo de cálculos [8:30].
Si quieres dominar las compression lists, la mejor estrategia es practicar: prueba a filtrar cadenas de texto, transformar diccionarios o generar patrones numéricos. ¿Qué ejercicio vas a intentar primero? Comparte tu experiencia en los comentarios.