Contatore Python – Collezioni Python Counter

La classe Python Counter fa parte del modulo Collections. Counter è una sottoclasse di Dictionary e viene utilizzata per tenere traccia degli elementi e del loro conteggio.

Python Counter

Counter è una collezione non ordinata in cui gli elementi sono memorizzati come chiavi del Dict e il loro conteggio come valore del dizionario. Il conteggio degli elementi di Counter può essere positivo, zero o interi negativi. Tuttavia, non ci sono restrizioni sulle sue chiavi e sui suoi valori. Anche se i valori sono destinati ad essere numeri, possiamo memorizzare anche altri oggetti.

Creazione dell’oggetto Python Counter

Possiamo creare un Counter vuoto o iniziare con alcuni valori iniziali.

from collections import Counter

# Counter vuoto
counter = Counter()
print(counter)  # Counter()

# Counter con valori iniziali
counter = Counter(['a', 'a', 'b'])
print(counter)  # Counter({'a': 2, 'b': 1})

counter = Counter(a=2, b=3, c=1)
print(counter)  # Counter({'b': 3, 'a': 2, 'c': 1})

Possiamo anche utilizzare qualsiasi iterabile come argomento per creare un oggetto Counter. Quindi letterale di stringa e Lista possono essere utilizzati anche per creare un oggetto Counter.

# Iterable come argomento per Counter
counter = Counter('abc')
print(counter)  # Counter({'a': 1, 'b': 1, 'c': 1})

# Lista come argomento per Counter
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

# Dizionario come argomento per Counter
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

Come ho menzionato prima, possiamo utilizzare dati non numerici anche per i valori di conteggio, ma ciò vanificherà lo scopo della classe Counter.

# Counter funziona anche con dati non numerici
special_counter = Counter(name='Pankaj', age=20)
print(special_counter)  # Counter({'name': 'Pankaj', 'age': 20})

Metodi Counter di Python

Esaminiamo i metodi della classe Counter e alcune altre operazioni che possiamo eseguire su di essa.

Ottenere il Conteggio degli Elementi

# ottenere il conteggio
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog)  # 2

Se cerchiamo di ottenere il conteggio di una chiave inesistente, restituirà 0 e non genererà l’errore KeyError.

# ottenere il conteggio per una chiave inesistente, non causa KeyError
print(counter['Unicorn'])  # 0

Impostare il Conteggio degli Elementi

Possiamo anche impostare il conteggio di un elemento esistente nel contatore. Se l’elemento non esiste, viene aggiunto al contatore.

counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# impostare il conteggio
counter['Horse'] = 0
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

# impostare il conteggio for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})

Eliminare un elemento da Counter

Possiamo usare del per eliminare un elemento dall’oggetto contatore.

# Elimina elemento da Counter
del counter['Unicorn']
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

elementi()

Questo metodo restituisce la lista degli elementi nel contatore. Vengono restituiti solo gli elementi con conteggio positivo.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# elements()
elements = counter.elements()  # doesn't return elements with count 0 or less
for value in elements:
    print(value)

Il codice sopra stamperà “Cane” due volte perché il suo conteggio è 2. Gli altri elementi verranno ignorati perché non hanno un conteggio positivo. Counter è una collezione non ordinata, quindi gli elementi vengono restituiti in un ordine non particolare.

most_common(n)

Questo metodo restituisce gli elementi più comuni dal contatore. Se non forniamo il valore di ‘n’, viene restituito un dizionario ordinato dagli elementi più comuni ai meno comuni. Possiamo usare lo slicing per ottenere gli elementi meno comuni su questo dizionario ordinato.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# most_common()
most_common_element = counter.most_common(1)
print(most_common_element)  # [('Dog', 2)]

least_common_element = counter.most_common()[:-2:-1]
print(least_common_element)  # [('Cat', -1)]

La funzione subtract() e update()

Il metodo subtract() di Counter viene utilizzato per sottrarre i conteggi degli elementi da un altro contatore. Il metodo update() viene utilizzato per aggiungere i conteggi da un altro contatore.

counter = Counter('ababab')
print(counter)  # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c)  # Counter({'a': 1, 'b': 1, 'c': 1})

# subtract
counter.subtract(c)
print(counter)  # Counter({'a': 2, 'b': 2, 'c': -1})

# update
counter.update(c)
print(counter)  # Counter({'a': 3, 'b': 3, 'c': 0})

Operazioni Aritmetiche su Counter Python

Possiamo eseguire alcune operazioni aritmetiche anche su Counters, proprio come i numeri. Tuttavia, con queste operazioni vengono restituiti solo gli elementi con conteggio positivo.

# operazioni aritmetiche
c1 = Counter(a=2, b=0, c=-1)
c2 = Counter(a=1, b=-1, c=2)

c = c1 + c2  # return items having +ve count only
print(c)  # Counter({'a': 3, 'c': 1})

c = c1 - c2  # keeps only +ve count elements
print(c)  # Counter({'a': 1, 'b': 1})

c = c1 & c2  # intersection min(c1[x], c2[x])
print(c)  # Counter({'a': 1})

c = c1 | c2  # union max(c1[x], c2[x])
print(c)  # Counter({'a': 2, 'c': 2})

Operazioni Varie su Counter Python

Guardiamo alcuni esempi di codice per operazioni varie che possiamo eseguire sugli oggetti Counter.

counter = Counter({'a': 3, 'b': 3, 'c': 0})
# esempi vari
print(sum(counter.values()))  # 6

print(list(counter))  # ['a', 'b', 'c']
print(set(counter))  # {'a', 'b', 'c'}
print(dict(counter))  # {'a': 3, 'b': 3, 'c': 0}
print(counter.items())  # dict_items([('a', 3), ('b', 3), ('c', 0)])

# rimuovere elementi con conteggio 0 o negativo
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter)  # Counter({'b': 3, 'a': 2})

# cancellare tutti gli elementi
counter.clear()
print(counter)  # Counter()

Questo è tutto per la classe Counter di Python.

Puoi scaricare il codice di esempio completo dal mio Repository GitHub.

Riferimento: Python Docs

Source:
https://www.digitalocean.com/community/tutorials/python-counter-python-collections-counter