Counter en Python: contar elementos con collections

Actualizado el: 11/07/2026
Tempo de leitura: 4 minutos
Uso do Counter do collections para contar elementos em Python

El Counter en Python es una clase del módulo collections diseñada para contar elementos hashables. Funciona como un diccionario especializado: cada elemento se convierte en una clave y su frecuencia se guarda como valor. Esto permite analizar palabras, productos, estados, respuestas, eventos y cualquier secuencia repetitiva sin escribir manualmente toda la lógica de conteo.

Counter forma parte de la biblioteca estándar, por lo que no requiere instalación. En esta guía aprenderás a crearlo, consultar frecuencias, encontrar valores comunes, actualizar conteos, combinar resultados y aplicarlo a ejemplos reales.

Crear un Counter

from collections import Counter

colors = ["blue", "red", "blue", "green", "blue", "red"]
counts = Counter(colors)

print(counts)

El resultado contiene cada color y la cantidad de apariciones. Counter acepta listas, tuplas, strings, generadores y otros iterables.

La documentación oficial de Counter describe sus métodos, operaciones y comportamientos especiales.

Contar caracteres y palabras

Una string se recorre carácter por carácter:

letters = Counter("programacion")
print(letters)

Para contar palabras, primero debes separarlas y normalizarlas:

text = "Python es práctico y Python es legible"
words = text.casefold().split()
word_counts = Counter(words)

print(word_counts)

La guía de strings en Python explica casefold(), split(), limpieza y normalización.

Contar palabras con una expresión regular

Cuando el texto contiene puntuación, una expresión regular puede extraer palabras:

import re
from collections import Counter

text = "Python, Python y más Python. Datos y automatización."
words = re.findall(r"\b\w+\b", text.casefold())
counts = Counter(words)

print(counts)

La guía de expresiones regulares en Python explica límites de palabra, grupos, cuantificadores y patrones compilados.

Consultar una frecuencia

counts = Counter(["open", "closed", "open"])

print(counts["open"])
print(counts["pending"])

A diferencia de un diccionario normal, Counter devuelve cero para una clave ausente en lugar de generar KeyError. Esto facilita la acumulación de resultados.

Encontrar los elementos más comunes

sales = Counter({
    "keyboard": 12,
    "mouse": 27,
    "monitor": 8,
    "headset": 15,
})

print(sales.most_common(2))

most_common(n) devuelve una lista de tuplas ordenadas desde la frecuencia mayor. Sin argumento devuelve todos los elementos.

Actualizar conteos

counts = Counter(["A", "B", "A"])
counts.update(["A", "C", "C"])

print(counts)

update() suma las nuevas frecuencias; no reemplaza el contenido anterior. También acepta un mapeo:

counts.update({"A": 4, "B": 2})

Restar frecuencias

inventory = Counter({"pen": 10, "notebook": 5})
inventory.subtract({"pen": 3, "notebook": 1})

print(inventory)

subtract() permite valores cero y negativos. Esto es útil para diferencias, pero debes filtrar los resultados cuando solo tengan sentido cantidades positivas.

Eliminar valores cero o negativos

balance = Counter({"A": 3, "B": 0, "C": -2})
positive = +balance

print(positive)

El operador unario positivo crea otro Counter conservando únicamente valores mayores que cero. El operador unario negativo conserva la magnitud de los valores negativos.

Convertir a otros tipos

counts = Counter("banana")

print(dict(counts))
print(list(counts))
print(set(counts))

Convertir a diccionario conserva las frecuencias. Convertir a lista o set utiliza las claves. La guía de listas, tuplas, sets y diccionarios ayuda a elegir la estructura adecuada.

Recuperar elementos repetidos

counts = Counter({"A": 3, "B": 2, "C": 0})
expanded = list(counts.elements())

print(expanded)

elements() repite cada clave según su frecuencia positiva. Ignora cantidades iguales o menores que cero.

Sumar todos los conteos

counts = Counter({"success": 18, "failed": 2, "pending": 5})
print(counts.total())

En versiones modernas de Python, total() devuelve la suma de las frecuencias. También puedes utilizar sum(counts.values()).

Combinar Counters

morning = Counter({"coffee": 8, "tea": 3})
afternoon = Counter({"coffee": 5, "juice": 4})

print(morning + afternoon)
print(morning - afternoon)
print(morning | afternoon)
print(morning & afternoon)
  • + suma frecuencias y elimina resultados no positivos.
  • - resta y conserva resultados positivos.
  • | toma el máximo por clave.
  • & toma el mínimo por clave.

Estas operaciones son útiles para inventarios, comparación de colecciones y análisis de frecuencias.

Comprobar si una colección contiene otra

required = Counter({"wood": 3, "stone": 2})
available = Counter({"wood": 8, "stone": 4, "iron": 1})

print(required <= available)

La comparación verifica cada frecuencia. Es una forma clara de comprobar si existen recursos suficientes.

Ejemplo práctico: analizar un archivo de texto

import re
from collections import Counter
from pathlib import Path

path = Path("article.txt")
text = path.read_text(encoding="utf-8")
words = re.findall(r"\b\w+\b", text.casefold())

ignored = {"el", "la", "los", "las", "de", "y", "en"}
filtered = [word for word in words if word not in ignored]
counts = Counter(filtered)

for word, frequency in counts.most_common(10):
    print(f"{word}: {frequency}")

La guía de pathlib en Python explica lectura de archivos, rutas y búsqueda de documentos.

Ejemplo: comparar inventario esperado y real

from collections import Counter

expected = Counter({
    "keyboard": 10,
    "mouse": 20,
    "monitor": 5,
})

actual = Counter({
    "keyboard": 8,
    "mouse": 22,
    "monitor": 5,
})

missing = expected - actual
extra = actual - expected

print("Faltantes:", missing)
print("Excedentes:", extra)

Separar faltantes y excedentes produce un informe más útil que una resta única con valores negativos.

Counter frente a defaultdict

Counter es ideal cuando el objetivo principal es contar. defaultdict(int) ofrece más control cuando cada actualización necesita lógica personalizada:

from collections import defaultdict

totals = defaultdict(float)

totals["books"] += 19.90
totals["books"] += 12.50

La referencia general del módulo collections documenta Counter, defaultdict, deque y otras estructuras especializadas.

Errores frecuentes

  • No normalizar mayúsculas, espacios o puntuación antes de contar.
  • Suponer que update() reemplaza los valores.
  • Olvidar que subtract() puede producir números negativos.
  • Usar objetos no hashables, como listas, como elementos.
  • Convertir a lista esperando recuperar las repeticiones; para eso existe elements().
  • Utilizar Counter cuando los valores representan importes decimales y no frecuencias.

Conclusión

Counter reduce el código necesario para contar, comparar y combinar frecuencias. Domina la creación desde iterables, most_common(), update(), subtract(), elements() y las operaciones entre Counters. Después aplícalo a textos, inventarios, registros y análisis de respuestas.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Instalação offline de pacotes Python sem internet
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Cómo instalar paquetes de Python sin conexión a Internet

    Aprende a instalar paquetes de Python sin Internet con pip download, ruedas, requirements.txt, --no-index, hashes y repositorios internos.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Como acelerar código Python usando lru cache
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    lru_cache en Python: acelera funciones con caché

    Aprende lru_cache en Python: memoización, maxsize, cache_info, cache_clear, argumentos hashables, recursión y errores frecuentes.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Uso do módulo random para gerar valores aleatórios em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo random en Python: guía práctica para principiantes

    Aprende el módulo random en Python: enteros, decimales, choice, sample, shuffle, seeds, distribuciones y diferencias con secrets.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso do módulo collections para estruturas avançadas em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo collections en Python: deque, Counter y más

    Aprende collections en Python con Counter, defaultdict, deque, namedtuple, ChainMap y buenas prácticas para elegir estructuras eficientes.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Introdução ao módulo itertools para iniciantes em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    itertools en Python: guía práctica para iterar mejor

    Aprende itertools en Python con count, cycle, chain, islice, combinations, product, groupby, tee y zip_longest.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação moderna de arquivos usando pathlib em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Pathlib en Python: rutas y archivos de forma moderna

    Aprende pathlib en Python para crear rutas, leer y escribir archivos, recorrer carpetas, filtrar extensiones, renombrar y organizar datos.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026