Saltar a contenido

Collections e Itertools: Programación de Alto Rendimiento

Python incluye dos librerías estándar que son fundamentales para cualquier programador profesional: collections, que ofrece estructuras de datos especializadas, e itertools, que proporciona herramientas para iterar de forma ultra eficiente.


1. El Módulo collections

A veces, un diccionario o una lista común no son suficientes. collections ofrece alternativas optimizadas:

  • namedtuple: Crea pequeñas clases para almacenar datos sin el peso de una clase completa. Ideal para representar puntos, registros o coordenadas.
  • deque: Una lista de doble terminación. Permite agregar o eliminar elementos en ambos extremos de forma mucho más rápida que una lista normal.
  • Counter: Una herramienta diseñada específicamente para contar elementos en una secuencia.

2. El Módulo itertools

Este módulo es el "cuchillo suizo" para los bucles. Permite manipular secuencias de datos sin cargarlas todas en la memoria RAM (usando generadores).

  • cycle: Repite una secuencia de forma infinita.
  • chain: Une varias listas o iteradores en uno solo, sin crear una nueva lista en memoria.
  • combinations / permutations: Genera todas las agrupaciones posibles de un conjunto de datos, algo vital en estadística y seguridad.

3. ¿Por qué usarlos? (Eficiencia de Memoria)

La mayor ventaja de estas librerías es que trabajan con Lazy Evaluation (evaluación perezosa). Esto significa que si tienes una lista de un millón de elementos, itertools procesa uno por uno a medida que los necesitas, en lugar de intentar procesar el millón al mismo tiempo, lo que evita que tu computadora se quede sin memoria.


Reto: Analizador de Inventario Avanzado

Vamos a usar Counter para analizar un inventario y namedtuple para representar productos de forma elegante.

Instrucciones:

  1. Importa namedtuple y Counter desde el módulo collections.
  2. Define una namedtuple llamada Producto que tenga los campos: nombre y categoria.
  3. Crea una lista llamada inventario que contenga 3 objetos Producto:
    • Producto("Laptop", "Electronica")
    • Producto("Mouse", "Electronica")
    • Producto("Teclado", "Perifericos")
  4. Usa Counter para contar cuántos productos hay por cada categoría y guarda el resultado en una variable llamada conteo_categorias.

# Uso de estructuras avanzadas: