Comprensión de Listas y Diccionarios en Python
Las comprensiones son una forma concisa y elegante de crear listas y diccionarios en Python. Te permiten generar nuevas estructuras de datos aplicando transformaciones o filtros a secuencias existentes.
Comprensión de Listas
Sintaxis básica
[expresión for elemento in iterable]Ejemplos básicos
# Crear una lista con los cuadrados de los números del 0 al 9
cuadrados = [x**2 for x in range(10)]
print(cuadrados) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Convertir strings a mayúsculas
nombres = ['ana', 'juan', 'maria']
mayusculas = [nombre.upper() for nombre in nombres]
print(mayusculas) # ['ANA', 'JUAN', 'MARIA']Con condición (filtrado)
# Solo números pares al cuadrado
pares_cuadrados = [x**2 for x in range(10) if x % 2 == 0]
print(pares_cuadrados) # [0, 4, 16, 36, 64]
# Filtrar palabras con más de 3 letras
palabras = ['sol', 'luna', 'estrella', 'mar', 'cielo']
largas = [p for p in palabras if len(p) > 3]
print(largas) # ['luna', 'estrella', 'cielo']Múltiples bucles
# Producto cartesiano
colores = ['rojo', 'azul']
tallas = ['S', 'M', 'L']
combinaciones = [(color, talla) for color in colores for talla in tallas]
print(combinaciones)
# [('rojo', 'S'), ('rojo', 'M'), ('rojo', 'L'),
# ('azul', 'S'), ('azul', 'M'), ('azul', 'L')]Comprensión de Diccionarios
Sintaxis básica
{clave: valor for elemento in iterable}Ejemplos básicos
# Crear diccionario con números y sus cuadrados
cuadrados_dict = {x: x**2 for x in range(5)}
print(cuadrados_dict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# Invertir clave-valor de un diccionario
original = {'a': 1, 'b': 2, 'c': 3}
invertido = {valor: clave for clave, valor in original.items()}
print(invertido) # {1: 'a', 2: 'b', 3: 'c'}Con condición
# Solo números pares con sus cuadrados
pares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
print(pares_dict) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# Filtrar y transformar diccionario existente
precios = {'manzana': 1.5, 'banana': 0.8, 'naranja': 1.2, 'uva': 2.5}
caros = {fruta: precio for fruta, precio in precios.items() if precio > 1.0}
print(caros) # {'manzana': 1.5, 'naranja': 1.2, 'uva': 2.5}Ejemplos más complejos
Comprensión de listas anidadas
# Aplanar una lista de listas
lista_anidada = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
plana = [num for sublista in lista_anidada for num in sublista]
print(plana) # [1, 2, 3, 4, 5, 6, 7, 8, 9]Comprensión con if-else
# Clasificar números
numeros = range(10)
clasificados = ['par' if x % 2 == 0 else 'impar' for x in numeros]
print(clasificados)
# ['par', 'impar', 'par', 'impar', 'par', 'impar', 'par', 'impar', 'par', 'impar']
# Aplicar descuento solo a productos caros
productos = {'laptop': 1000, 'mouse': 20, 'teclado': 50, 'monitor': 300}
con_descuento = {prod: precio * 0.9 if precio > 100 else precio
for prod, precio in productos.items()}
print(con_descuento)
# {'laptop': 900.0, 'mouse': 20, 'teclado': 50, 'monitor': 270.0}Ventajas de las comprensiones
Más legibles: Son más concisas y expresivas
Más eficientes: Generalmente más rápidas que bucles tradicionales
Pythonicas: Siguen el estilo idiomático de Python
Cuándo evitar comprensiones
Cuando la lógica es muy compleja
Cuando necesitas efectos secundarios (como imprimir durante el proceso)
Cuando la comprensión se vuelve difícil de leer
Las comprensiones son una herramienta poderosa que hace tu código más elegante y eficiente. ¡Practícalas y verás cómo mejoran tus programas!
Comentarios
Publicar un comentario