Comprension de Listas: Codigo Pythonico y Eficiente
La comprension de listas (list comprehension) es una de las caracteristicas mas elegantes de Python. Permite crear listas de forma compacta y legible en una sola linea.
Sintaxis basica# Forma larga
cuadrados = []
for n in range(1, 6):
cuadrados.append(n ** 2)
print(cuadrados) # [1, 4, 9, 16, 25]
# Comprension de lista
cuadrados = [n ** 2 for n in range(1, 6)]
print(cuadrados) # [1, 4, 9, 16, 25]
Estructura: [expresion for elemento in iterable]
Con condicion (filtro)pares = [n for n in range(1, 11) if n % 2 == 0]
print(pares) # [2, 4, 6, 8, 10]
numeros = [-5, 3, -2, 8, -1, 0, 7, -4, 9]
positivos = [n for n in numeros if n > 0]
print(positivos) # [3, 8, 7, 9]
Estructura: [expresion for elemento in iterable if condicion]
Transformar datoscelsius = [0, 10, 20, 30, 40, 100]
fahrenheit = [(c * 9/5) + 32 for c in celsius]
print(fahrenheit)
nombres = ['ana', 'carlos', 'maria', 'pedro']
formateados = [n.capitalize() for n in nombres]
print(formateados)
emails = ['[email protected]', '[email protected]', '[email protected]']
dominios = [e.split('@')[1] for e in emails]
print(dominios)
Con if-else
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
clasificacion = ['par' if n % 2 == 0 else 'impar' for n in numeros]
print(clasificacion)
precios = [100, 250, 50, 800, 30, 500]
final = [p * 0.8 if p > 200 else p for p in precios]
print(final)
Multiples for
colores = ['rojo', 'azul', 'verde']
tallas = ['S', 'M', 'L']
combinaciones = [(color, talla) for color in colores for talla in tallas]
print(f'Total: {len(combinaciones)}')
# Aplanar lista de listas
matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
plana = [num for fila in matriz for num in fila]
print(plana)
Comprension de diccionarios
cuadrados = {n: n**2 for n in range(1, 6)}
print(cuadrados)
original = {'a': 1, 'b': 2, 'c': 3}
invertido = {v: k for k, v in original.items()}
print(invertido)
precios = {'laptop': 800, 'mouse': 25, 'teclado': 60, 'monitor': 400}
oferta = {prod: precio * 0.9 for prod, precio in precios.items() if precio > 50}
print(oferta)
Comprension de sets
vocales = {letra for letra in 'programacion' if letra in 'aeiou'}
print(vocales)
numeros = [-3, -1, 2, -3, 4, 1, -2, 4]
absolutos = {abs(n) for n in numeros}
print(absolutos)
Generadores: La version eficiente
# Lista: guarda todo en memoria
cuadrados_lista = [n**2 for n in range(1000000)]
# Generador: calcula un valor a la vez
cuadrados_gen = (n**2 for n in range(1000000))
# sum() con generador - muy eficiente
total = sum(n**2 for n in range(1, 11))
print(total) # 385
Caso real: Procesamiento de ventas
ventas = [
{'producto': 'Laptop', 'cantidad': 5, 'precio': 800, 'region': 'norte'},
{'producto': 'Mouse', 'cantidad': 50, 'precio': 25, 'region': 'sur'},
{'producto': 'Monitor', 'cantidad': 10, 'precio': 400, 'region': 'norte'},
{'producto': 'Teclado', 'cantidad': 30, 'precio': 60, 'region': 'sur'},
{'producto': 'Laptop', 'cantidad': 3, 'precio': 800, 'region': 'sur'},
]
totales = [v['cantidad'] * v['precio'] for v in ventas]
print(f'Totales: {totales}')
norte = [v['producto'] for v in ventas if v['region'] == 'norte']
print(f'Norte: {norte}')
altas = [
{'producto': v['producto'], 'total': v['cantidad'] * v['precio']}
for v in ventas
if v['cantidad'] * v['precio'] > 1000
]
print(f'Ventas altas: {altas}')
productos = {v['producto'] for v in ventas}
resumen = {
prod: sum(v['cantidad'] * v['precio'] for v in ventas if v['producto'] == prod)
for prod in productos
}
print(f'Por producto: {resumen}')
Cuando usarlas y cuando no
USAR cuando:
- La logica es simple y cabe en una linea
- Es mas legible que el for equivalente
NO USAR cuando:
- La expresion es muy compleja
- Necesitas efectos secundarios (print, guardar en DB)
- La legibilidad se ve comprometida
# BIEN: simple y claro
cuadrados = [x**2 for x in range(10)]
# MAL: demasiado complejo
# resultado = [f(x) for x in datos if x > 0 if x < 100 if x % 2 == 0]
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- Sintaxis: [expresion for elemento in iterable if condicion]
- Funciona con listas, diccionarios, sets y generadores
- Son mas rapidas que los for equivalentes
- No abuses si complican la lectura
Excelente! En el proximo modulo aprenderemos Programacion Orientada a Objetos para organizar nuestro codigo de forma mucho mas potente.
🧠Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación especÃfica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.