Uso de la biblioteca collections de Python
¿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.