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

python
[expresión for elemento in iterable]

Ejemplos básicos

python
# 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)

python
# 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

python
# 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

python
{clave: valor for elemento in iterable}

Ejemplos básicos

python
# 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

python
# 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

python
# 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

python
# 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

  1. Más legibles: Son más concisas y expresivas

  2. Más eficientes: Generalmente más rápidas que bucles tradicionales

  3. 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

Entradas populares de este blog

¿Qué es un Closure?

Calculadora de edad

Funciones en Python: con y sin paréntesis