Como contar ocorrências em uma lista em Python

Aprenda as melhores maneiras de contar ocorrências de elementos em uma lista Python. Compare o método count(), Collections.Counter e contagem de dicionário.

Experimente esta solução no Editor

Visão geral

A análise de conjuntos de dados geralmente exige que você conte as ocorrências de elementos individuais. Por exemplo, contar quantos votos cada candidato recebeu, contar frequências de palavras em arquivos de texto ou identificar duplicatas em logs de transações. Python fornece diversas ferramentas para resolver isso, dependendo se você está procurando uma contagem de itens únicos ou uma contagem de frequência completa.

Para verificar a frequência de um único elemento específico, o tipo de lista integrado fornece um método `.count(value)`. Ele itera na lista e retorna um número inteiro contando quantas vezes aquele valor exato aparece. Embora simples e legível, chamar `.count()` em um loop para obter contagens para todos os elementos é altamente ineficiente, executando em complexidade O(N^2).

Para contar as frequências de todos os elementos simultaneamente em uma única passagem, a biblioteca padrão oferece a classe `Counter` dentro do módulo `collections`. Passar uma lista para `Counter` retorna um objeto semelhante a um dicionário que representa as frequências de todos os elementos em tempo O(N). Ele também fornece métodos auxiliares como `most_common()` para recuperar rapidamente os itens principais.

Saída de código e execução

Este código demonstra a contagem de elementos únicos em listas e a obtenção da contagem total de itens usando coleções.Counter.

count_occurrences.py
Experimente no 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)
Saída 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}

Implementação passo a passo

  • Chame list_variable.count(value) se você precisar apenas da contagem de um único item específico na lista.
  • Importe coleções.Counter e passe a lista para contar todos os elementos exclusivos em uma única passagem otimizada.
  • Use o método .most_common(n) em um objeto Counter para extrair os n elementos mais frequentes.

Perguntas frequentes

O que acontece se eu procurar uma chave ausente em um objeto Collections.Counter?

Ao contrário de um dicionário padrão que gera um KeyError, um objeto Counter retorna 0 para elementos ausentes, representando zero ocorrências.

Qual é a complexidade de tempo do Counter em comparação com a contagem em loop com list.count()?

O contador conta todos os elementos em tempo linear O(N), passando pela lista uma vez. Iterar os elementos da lista e chamar list.count() leva O(N^2) tempo quadrático, o que é extremamente lento para listas grandes.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.