Uso de la biblioteca collections de Python

De ChuWiki


¿Qué es la biblioteca collections de python?[editar]

La biblioteca collections en Python proporciona tipos de datos especializados que pueden ser muy útiles en varias situaciones. Aquí hay una breve introducción a algunos de los más utilizados: Counter, defaultdict, namedtuple, y deque.

Counter[editar]

Counter es una subclase de dict diseñada para facilitar el contar objetos en una lista.

from collections import Counter

# Contar ocurrencias de elementos en una lista
elements = ['a', 'b', 'c', 'a', 'b', 'b']
counter = Counter(elements)
print(counter)  # Salida: Counter({'b': 3, 'a': 2, 'c': 1})

# Obtener los n elementos más comunes
print(counter.most_common(2))  # Salida: [('b', 3), ('a', 2)]

defaultdict[editar]

defaultdict es una subclase de dict que proporciona un valor predeterminado para claves inexistentes. Un dict normal da error si intentamos accecer a una clave que no existe. Con defaultdict obtendremos un valor por defecto, sin obtener el error.

from collections import defaultdict

# Crear un defaultdict con una lista como valor predeterminado
dd = defaultdict(list)

# Añadir elementos
dd['fruits'].append('apple')
dd['fruits'].append('banana')
dd['vegetables'].append('carrot')

print(dd)  # Salida: defaultdict(<class 'list'>, {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']})

namedtuple[editar]

Una tupla es una lista inmutable de objetos. A dichos objetos se accede por índice. Para facilitar el acceso y no tener que recordar el índice de cada elemento, namedtuple permite asignar un nombre a cada índice. De esta forma, el acceso es más legible.

from collections import namedtuple

# Crear una clase Point con campos x y y
Point = namedtuple('Point', ['x', 'y'])

# Crear una instancia de Point. Será inmutable, no podemos cambiar los valores de x e y después.
p = Point(11, 22)
print(p.x, p.y)  # Salida: 11 22


deque[editar]

deque (doble cola) es una generalización de una pila y una cola que es eficiente para añadir y eliminar elementos de ambos extremos. Se prefiere deque a una list cuando vamos a añadir y retirar elementos de ambos extremos con frecuencia.


from collections import deque

# Crear una deque
dq = deque(['a', 'b', 'c'])

# Añadir elementos a ambos extremos
dq.append('d')  # Añadir al final
dq.appendleft('z')  # Añadir al inicio

# Eliminar elementos de ambos extremos
dq.pop()  # Eliminar del final
dq.popleft()  # Eliminar del inicio

print(dq)  # Salida: deque(['a', 'b', 'c'])

Beneficios:[editar]

  • Counter: Facilita el conteo de elementos en iterables.
  • defaultdict: Simplifica el trabajo con diccionarios que tienen valores predeterminados.
  • namedtuple: Proporciona tuplas legibles y auto-documentadas.
  • deque: Proporciona una estructura de datos eficiente para operaciones de añadir y eliminar en ambos extremos.