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:
- Importa
namedtupleyCounterdesde el módulocollections. - Define una
namedtuplellamadaProductoque tenga los campos:nombreycategoria. - Crea una lista llamada
inventarioque contenga 3 objetosProducto:Producto("Laptop", "Electronica")Producto("Mouse", "Electronica")Producto("Teclado", "Perifericos")
- Usa
Counterpara contar cuántos productos hay por cada categoría y guarda el resultado en una variable llamadaconteo_categorias.
# Uso de estructuras avanzadas: