Pular para o conteúdo

Como usar o contador no Python?

CodeMDD.io

Python’s Counter: A maneira Pythonica de Contar Objetos

Contar vários objetos repetidos de uma vez é um problema comum na programação. O Python oferece um conjunto de ferramentas e técnicas que você pode usar para abordar esse problema. No entanto, o Counter do Python, da biblioteca collections, fornece uma solução limpa, eficiente e Pythonica.

Essa subclasse de dicionário oferece recursos eficientes de contagem. Entender o Counter e como usá-lo de forma eficiente é uma habilidade conveniente para um desenvolvedor Python.

Neste tutorial, você aprenderá como:

  • Contar vários objetos repetidos de uma vez
  • Criar contadores usando o Counter do Python
  • Obter os objetos mais comuns em um contador
  • Atualizar as contagens de objetos
  • Usar o Counter para facilitar cálculos adicionais

Você também aprenderá o básico de como usar o Counter como um multiconjunto (multiset), que é uma característica adicional dessa classe em Python.

Contando Objetos em Python

Às vezes, você precisa contar os objetos em uma determinada fonte de dados para saber quantas vezes eles ocorrem. Em outras palavras, você precisa determinar a frequência deles. Por exemplo, você pode querer saber com que frequência um item específico aparece em uma lista ou sequência de valores. Quando a lista é pequena, contar os itens pode ser simples e rápido. No entanto, quando você tem uma lista longa, contar as coisas pode ser mais desafiador.

Para contar os objetos, você normalmente usa um contador, que é uma variável de inteiro com um valor inicial de zero. Em seguida, você incrementa o contador para refletir o número de vezes que um determinado objeto aparece na fonte de dados de entrada.

Quando você está contando as ocorrências de um único objeto, pode usar um único contador. No entanto, quando você precisa contar vários objetos diferentes, você deve criar tantos contadores quanto objetos únicos tiver.

Para contar vários objetos diferentes de uma vez, você pode usar um dicionário Python. As chaves do dicionário armazenarão os objetos que você deseja contar. Os valores do dicionário conterão o número de repetições de um determinado objeto, ou a contagem do objeto.

Por exemplo, para contar os objetos em uma sequência usando um dicionário, você pode iterar sobre a sequência, verificar se o objeto atual não está no dicionário para inicializar o contador (par chave-valor) e, em seguida, incrementar sua contagem de acordo.

Aqui está um exemplo de código que demonstra como contar os objetos em uma sequência usando um dicionário:

sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = {}
for obj in sequence:
if obj not in counter:
counter[obj] = 1
else:
counter[obj] += 1
print(counter)

A saída desse código será:

{'apple': 3, 'banana': 2, 'orange': 1}

Como você pode ver, o dicionário counter contém as contagens de cada objeto na sequência.

Introdução ao Counter do Python

Embora contar objetos usando um dicionário seja uma solução viável, o Python oferece uma maneira mais fácil e mais eficiente de fazer isso usando o Counter da biblioteca collections.

A classe Counter estende a funcionalidade do dicionário, fornecendo uma maneira conveniente de contar objetos em uma sequência de valores. Ela possui métodos úteis para obter as contagens de objetos, encontrar os objetos mais comuns e realizar cálculos com as contagens.

Construindo Contadores

Você pode criar um contador utilizando a função Counter(), passando uma sequência de valores como argumento. Por exemplo:

from collections import Counter
sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(sequence)
print(counter)

A saída será a mesma do código anterior:

Counter({'apple': 3, 'banana': 2, 'orange': 1})

Atualizando as Contagens de Objetos

Você também pode atualizar as contagens de objetos em um contador utilizando o método update(). Esse método recebe uma sequência de valores e incrementa as contagens correspondentes. Por exemplo:

from collections import Counter
sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter()
counter.update(sequence)
print(counter)

A saída será a mesma do código anterior:

Counter({'apple': 3, 'banana': 2, 'orange': 1})

Acessando o Conteúdo do Counter

Você pode acessar o conteúdo específico de um contador, ou seja, as contagens de objetos individuais, utilizando a notação de dicionário. Por exemplo:

from collections import Counter
sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(sequence)
print(counter['apple']) # Output: 3
print(counter['banana']) # Output: 2
print(counter['orange']) # Output: 1

Encontrando os Objetos Mais Comuns

Muitas vezes, você precisa encontrar os objetos mais comuns em um contador. Para fazer isso, você pode utilizar o método most_common(), que retorna uma lista de tuplas contendo os objetos mais comuns e suas contagens correspondentes, em ordem decrescente. Por exemplo:

from collections import Counter
sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(sequence)
print(counter.most_common()) # Output: [('apple', 3), ('banana', 2), ('orange', 1)]

Você também pode usar o argumento n no método most_common() para especificar o número de objetos mais comuns que deseja obter. Por exemplo, para obter apenas os dois objetos mais comuns:

from collections import Counter
sequence = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(sequence)
print(counter.most_common(2)) # Output: [('apple', 3), ('banana', 2)]

Exemplo de Uso do Counter

Agora que você entende como construir, atualizar e acessar os contadores do Python e como encontrar os objetos mais comuns, vamos ver alguns exemplos práticos de como utilizar o Counter.

Contando Letras em um Arquivo de Texto

Suponha que você tenha um arquivo de texto e queira contar quantas vezes cada letra aparece nele. Você pode usar um Counter para resolver esse problema de forma eficiente. Aqui está um exemplo de código que ilustra como fazer isso:

from collections import Counter
def count_letters(filename):
with open(filename, 'r') as file:
text = file.read()
counter = Counter(text)
for letter, count in counter.items():
print(f'{letter}: {count}')
count_letters('text.txt')

Neste exemplo, o arquivo text.txt contém o seguinte texto:

lorem ipsum dolor sit amet consectetur adipiscing elit

A saída do código será a contagem de cada letra no texto:

l: 1
o: 4
r: 4
e: 5
m: 4
: 7
i: 6
p: 2
s: 4
u: 1
d: 2
t: 4
a: 2
c: 2
n: 3
g: 1
:

Plotando Dados Categóricos com Gráficos de Barras ASCII

Outra maneira interessante de usar o Counter é para plotar dados categóricos com gráficos de barras ASCII. Aqui está um exemplo de código que mostra como fazer isso:

from collections import Counter
def plot_bar_chart(data):
counter = Counter(data)
max_value = max(counter.values())
for item, count in counter.items():
bar = '#' * int(count * 80 https://codemdd.io/ max_value)
print(f'{item}: {bar}')
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
plot_bar_chart(data)

A saída do código será um gráfico de barras ASCII que representa a contagem de cada item no conjunto de dados:

apple: #####################
banana: #############
orange: ########

Usando o Counter como Multiconjunto

Além de contar objetos, o Counter também pode ser usado como um multiconjunto. Isso significa que ele permite armazenar elementos repetidos e realizar operações aritméticas com eles.

Restaurando Elementos de um Counter

Você pode restaurar os elementos de um contador para obter uma lista com os valores duplicados. Para fazer isso, basta convertê-lo para uma lista. Aqui está um exemplo:

from collections import Counter
counter = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
elements = list(counter)
print(elements) # Output: ['apple', 'banana', 'orange']
Subtraindo a Multiplicidade dos Elementos

Você também pode subtrair a multiplicidade dos elementos de um contador. Isso remove as ocorrências de um subconjunto do contador original. Aqui está um exemplo:

from collections import Counter
counter1 = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
counter2 = Counter(['apple', 'banana'])
result = counter1 - counter2
print(result) # Output: Counter({'apple': 2, 'orange': 1})
Realizando Operações Aritméticas com a Multiplicidade dos Elementos

Você pode realizar operações aritméticas com a multiplicidade dos elementos de um contador. Por exemplo, você pode somar dois contadores para obter um novo contador que contém as somas das multiplicidades correspondentes dos elementos. Aqui está um exemplo:

from collections import Counter
counter1 = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
counter2 = Counter(['apple', 'banana'])
result = counter1 + counter2
print(result) # Output: Counter({'apple': 4, 'banana': 3, 'orange': 1})

Conclusão

Neste tutorial, você aprendeu como usar o Counter do Python para contar objetos de forma eficiente e Pythonica. Você viu como construir contadores, atualizar as contagens de objetos, acessar o conteúdo do contador e encontrar os objetos mais comuns. Também aprendeu sobre o básico de como usar o Counter como um multiconjunto, com exemplos de restauração de elementos, subtração de multiplicidade e operações aritméticas com a multiplicidade dos elementos.

Agora que você possui essa ferramenta poderosa no seu arsenal, você pode contar objetos de maneira rápida e fácil em seus projetos Python. Lembre-se de utilizar o Counter sempre que precisar lidar com a contagem de objetos repetidos.