Como contar as ocorrências de um item em uma lista no Python?

Luiza Pereira
5 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com listas no Python, uma tarefa comum é contar quantas vezes um item específico aparece. Isso pode ser facilmente alcançado usando métodos e classes integrados. Neste artigo, exploraremos como contar as ocorrências de um único item, bem como como fazer o levantamento de todos os itens em uma lista.

Contando as Ocorrências de um Único Item

Se você está interessado em descobrir quantas vezes um elemento específico ocorre em uma lista, você pode usar o método count. Este método é direto e eficiente para itens individuais. Veja como você pode usá-lo:

minha_lista = [1, 2, 3, 4, 1, 4, 1]
contagem_de_item = minha_lista.count(1)
print(contagem_de_item)  # Saída: 3
Testar

No exemplo acima, contamos quantas vezes o número 1 aparece na nossa lista, que é 3.

No entanto, é importante notar que usar o método count repetidamente em um loop pode ser lento, especialmente para listas grandes. Isso ocorre porque cada chamada ao count percorre toda a lista. Se você está contando vários itens diferentes, isso pode levar a um problema de desempenho.

Contando as Ocorrências de Múltiplos Itens

Quando você precisa contar as ocorrências de cada elemento diferente em uma lista, você deve considerar o uso da classe Counter do módulo collections. Isso é particularmente útil se você está trabalhando com o Python 2.7 ou qualquer versão do Python 3.

Aqui está um exemplo de como usar Counter:

from collections import Counter
cores = ['azul', 'vermelho', 'azul', 'amarelo', 'azul', 'vermelho']
contagem_de_cores = Counter(cores)
print(contagem_de_cores)  # Saída: Counter({'azul': 3, 'vermelho': 2, 'amarelo': 1})
Testar

A classe Counter fornece um objeto semelhante a um dicionário onde as chaves são os elementos da lista e os valores são suas contagens. Este método é muito mais eficiente do que usar count em um loop porque requer apenas uma única passagem pela lista.

Fazendo o Levantamento de uma Lista com count e Counter

Para fazer o levantamento de uma lista, o que significa contar as ocorrências de todos os itens, você pode usar tanto o método count dentro de uma compreensão de lista quanto a classe Counter.

Usando count com uma compreensão de lista:

l = ["a", "b", "b"]
levantamento_com_count = [[x, l.count(x)] for x in set(l)]
print(levantamento_com_count)  # Saída: [['a', 1], ['b', 2]]
Testar

Usando Counter:

from collections import Counter
levantamento_com_counter = Counter(l)
print(levantamento_com_counter)  # Saída: Counter({'b': 2, 'a': 1})
Testar

Desempenho: Counter vs. count

Em termos de desempenho, Counter é significativamente mais rápido do que usar count em um loop. A diferença na velocidade se deve ao fato de Counter realizar apenas uma única passagem pela lista, enquanto count requer várias passagens.

Para ilustrar isso, considere o seguinte teste de desempenho:

# Script de comparação de desempenho (simplificado para brevidade)
from collections import Counter
import timeit

# Cronometrando Counter
tempo_counter = timeit.timeit('Counter(l)', 'from collections import Counter; l = ["a", "b", "b"]', number=10000)

# Cronometrando count em uma compreensão de lista
tempo_count = timeit.timeit('[[x,l.count(x)] for x in set(l)]', 'l = ["a", "b", "b"]', number=10000)

print("Counter(): ", tempo_counter)
print("count():   ", tempo_count)
Testar

A saída mostrará que Counter é consistentemente mais rápido, muitas vezes por um fator de 2 ou mais.

Resumo

Em resumo, para contar as ocorrências de um único item em uma lista, use o método count. Para contar vários itens, Counter do módulo collections é a escolha preferida devido à sua eficiência. Lembre-se de que, embora count seja simples e direto para itens individuais, Counter é muito mais rápido para fazer o levantamento de listas inteiras. Esse conhecimento ajudará você a escrever códigos Python mais eficientes ao lidar com ocorrências de itens em listas.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse: