Las listas por comprensión (o list comprehensions) son una característica poderosa y expresiva de Python que permite construir listas nuevas a partir de iterables existentes, todo ello en una sola línea de código. Son legibles, concisas y, a menudo, más eficientes que los bucles tradicionales.
Son una forma de crear listas en Python utilizando una sintaxis compacta basada en una expresión, un iterador y (opcionalmente) una condición.
Con la forma : [nueva_expresión for elemento in iterable if condición]
- nueva_expresión: La operación o transformación a aplicar a cada elemento.
- for elemento in iterable: Itera sobre los elementos de un iterable (como una lista o rango).
- if condición(opcional): Filtra los elementos según una condición.
Convertir una lista de números en sus cuadrados:
numeros = [1, 2, 3, 4, 5]
cuadrados = [n**2 for n in numeros]
print(cuadrados)
# Salida: [1, 4, 9, 16, 25]
Seleccionar solo los números pares antes de calcular sus cuadrados:
numeros = [1, 2, 3, 4, 5]
cuadrados_pares = [n**2 for n in numeros if n % 2 == 0]
print(cuadrados_pares)
# Salida: [4, 16]
Puedes llamar funciones dentro de la expresión:
nombres = ["Ana", "Bernardo", "Carla", "Diego"]
longitudes = [len(nombre) for nombre in nombres]
print(longitudes)
# Salida: [3, 8, 5, 5]
Crear combinaciones de elementos con múltiples iteradores:
colores = ["rojo", "verde", "azul"]
tamaños = ["pequeño", "mediano", "grande"]
combinaciones = [(color, tamaño) for color in colores for tamaño in tamaños]
print(combinaciones)
# Salida: [('rojo', 'pequeño'), ('rojo', 'mediano'), ..., ('azul', 'grande')]
Usar listas por comprensión con otras estructuras, como diccionarios por comprensión
nombres = ["Ana", "Bernardo", "Carla"]
diccionario = {nombre: len(nombre) for nombre in nombres}
print(diccionario)
# Salida: {'Ana': 3, 'Bernardo': 8, 'Carla': 5}
Conjuntos:
numeros = [1, 2, 2, 3, 4, 4]
pares = {n for n in numeros if n % 2 == 0}
print(pares)
# Salida: {2, 4}
Para listas grandes, usa generadores para ahorrar memoria:
numeros = (n**2 for n in range(10))
print(list(numeros))
# Salida: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Aunque son poderosas, a veces es mejor optar por un bucle tradicional:
- Cuando la lógica es demasiado compleja y afecta la legibilidad.
- Si necesitas manejar excepciones o realizar múltiples pasos intermedios.
Las listas por comprensión son una herramienta esencial para escribir código Python limpio y eficiente. Con práctica, dominarás su uso y aprovecharás al máximo su flexibilidad. ¿Te atreves a crear tus propias transformaciones?