Cómo contar ocurrencias en una lista en Python

Aprenda las mejores formas de contar las apariciones de elementos en una lista de Python. Compare el método count(), collections.Counter y el conteo del diccionario.

Pruebe esta solución en el Editor

Descripción general

El análisis de conjuntos de datos a menudo requiere contar las apariciones de elementos individuales. Por ejemplo, contar cuántos votos recibió cada candidato, contar la frecuencia de palabras en archivos de texto o identificar duplicados en registros de transacciones. Python proporciona varias herramientas para resolver esto, dependiendo de si buscas un recuento de un solo elemento o un recuento de frecuencia completo.

Para verificar la frecuencia de un único elemento específico, el tipo de lista incorporado proporciona un método `.count(value)`. Itera sobre la lista y devuelve un número entero contando cuántas veces aparece ese valor exacto. Si bien es simple y legible, llamar a `.count()` en un bucle para obtener recuentos de todos los elementos es muy ineficiente y se ejecuta en una complejidad O(N^2).

Para contar las frecuencias de todos los elementos simultáneamente en una sola pasada, la biblioteca estándar ofrece la clase "Contador" dentro del módulo "colecciones". Pasar una lista a `Contador` devuelve un objeto similar a un diccionario que representa las frecuencias de todos los elementos en tiempo O(N). También proporciona métodos auxiliares como `most_common()` para recuperar rápidamente los elementos principales.

Código y salida de ejecución

Este código demuestra cómo contar elementos individuales en listas y cómo obtener el recuento total de elementos usando collections.Counter.

count_occurrences.py
Pruébelo en el editor
from collections import Counter

colors = ["red", "blue", "red", "green", "blue", "red"]

# Method 1: Count a single item using list.count()
red_count = colors.count("red")
print("Occurrences of 'red':", red_count)

# Method 2: Count all items using collections.Counter (Fast and powerful)
color_counts = Counter(colors)
print("\nCounter Object:", color_counts)
print("Count of 'blue':", color_counts["blue"])

# Getting the top most common items
print("Most common color:", color_counts.most_common(1))

# Method 3: Counting manually using a loop and a standard dictionary
manual_counts = {}
for item in colors:
    manual_counts[item] = manual_counts.get(item, 0) + 1
print("\nManual dict count:", manual_counts)
Salida terminal
Occurrences of 'red': 3

Counter Object: Counter({'red': 3, 'blue': 2, 'green': 1})
Count of 'blue': 2
Most common color: [('red', 3)]

Manual dict count: {'red': 3, 'blue': 2, 'green': 1}

Implementación paso a paso

  • Llame a list_variable.count(value) si solo necesita el recuento de un elemento específico en la lista.
  • Importe colecciones. Contador y pase la lista para contar todos los elementos únicos en una sola pasada optimizada.
  • Utilice el método .most_common(n) en un objeto Counter para extraer los n elementos más frecuentes.

Preguntas frecuentes

¿Qué sucede si busco una clave que falta en un objeto collections.Counter?

A diferencia de un diccionario estándar que genera un KeyError, un objeto Counter devuelve 0 para los elementos faltantes, lo que representa cero ocurrencias.

¿Cuál es la complejidad temporal de Counter en comparación con contar en un bucle con list.count()?

El contador cuenta todos los elementos en tiempo lineal O(N) pasando por la lista una vez. Iterar sobre los elementos de la lista y llamar a list.count() requiere un tiempo cuadrático O(N^2), lo cual es extremadamente lento para listas grandes.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.