Volver al curso

Python Desde Cero

leccion
13 / 21
beginner
20 horas
Estructuras de Datos

Comprension de Listas: Codigo Pythonico y Eficiente

Lectura
20 min~4 min lectura

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 datos
celsius = [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.