Python Counter: la sottoclasse per contare gli elementi
La classe Python Counter
si usa per contare gli elementi all’interno di un container. Si tratta di una sottoclasse di dictionary (dizionario) e può essere usata assieme a diversi metodi per realizzare diverse operazioni.
Cos’è Python Counter
?
Python Counter è uno strumento utile che consente di contare diversi elementi all’interno di una lista e di analizzare la frequenza con cui questi elementi compaiono. È una sottoclasse di dizionario. Mentre per brevi sequenze è possibile eseguire un conteggio manuale, Counter diventa indispensabile quando si ha a che fare con record di dati più estesi. Counter
in Python è una variabile intera e presenta un valore iniziale “null”. Usando Counter una volta è possibile stabilire la frequenza di un oggetto. Se, invece, di desidera prendere in considerazione più oggetti diversi, è possibile usare Counter
per ciascuno di essi.
La classe Counter
può essere usata su liste, tuple di Python, dizionari e stringhe di Python. La sintassi è la seguente:
Counter(list)
pythonNei prossimi paragrafi ti mostreremo alcuni semplici esempi per aiutarti a capire come usare Python Counter
nella pratica.
- Certificato SSL e protezione DDoS
- Velocità, flessibilità e scalabilità
- Dominio e consulente personale
- 1 anno gratis del gestionale di fatturazione elettronica FlexTax
Python Counter
con una lista
Nel primo esempio ci limitiamo a creare una semplice lista contenente valori diversi. La sintassi è la seguente:
Lista = ['a', 'a', 'b', 'a', 'c', 'b', 'b', 'c', 'a', 'c', 'b', 'c', 'c']
pythonLa lista presenta tre elementi diversi ‘a’, ‘b’ e ‘c’. Per scoprire la frequenza con cui ricorre ciascuno di questi elementi, usiamo Counter
in Python. L’output sarà il seguente:
Counter({'c' : 5, 'a' : 4, 'b' : 4})
pythonPer poter impiegare Python Counter
, anzitutto è necessario importare la classe. Il risultato viene visualizzato con print
. Il codice completo per questo esempio sarebbe:
from collections import Counter
Lista = ['a', 'a', 'b', 'a', 'c', 'b', 'b', 'c', 'a', 'c', 'b', 'c', 'c']
counter_lista = Counter(Lista)
print(Counter(Lista))
pythonL’output è il seguente:
Counter({'c' : 5, 'a' : 4, 'b' : 4})
pythonFunzionamento della classe Counter
con una tupla
Il secondo esempio è molto simile al primo. Questa volta usiamo Python Counter
con una tupla. In Python le tuple servono a salvare più valori di una variabile. Poiché Counter rappresenta una lista ordinata di oggetti, tale ordine viene preservato. Gli elementi sono racchiusi tra parentesi tonde e separati da virgole. Di conseguenza, il codice si scrive così:
from collections import Counter
Tupla = ('a', 'a', 'b', 'a', 'c', 'b', 'b', 'c', 'a', 'c', 'b', 'c', 'c')
print(Counter(Tupla))
pythonL’output è uguale all’esempio precedente:
Counter({'c' : 5, 'a' : 4, 'b' : 4})
pythonUso nella classe Dictionary
In un dizionario gli elementi vengono salvati sottoforma di coppie chiave-valore e racchiusi tra parentesi tonde. Utilizzando Counter di Python su un dizionario, questo viene internamente convertito in un oggetto hashtable. In questo processo, gli elementi del dizionario originale diventano le chiavi di Counter, mentre i calcoli associati diventano i valori corrispondenti. Facendo riferimento al conteggio precedente, la sintassi si presenterebbe così:
from collections import Counter
Dictionary = {'a' : 4, 'b' : 4, 'c' : 5}
counter_dictionary = Counter(Dictionary)
print(Counter(Dictionary))
pythonQuesto l’output:
Counter({'c' : 5, 'a' : 4, 'b' : 4})
pythonBastano tre passaggi per raggiungere i tuoi obiettivi: con Deploy Now di IONOS non devi far altro che connettere il tuo repository, configurare automaticamente la tua build e accedere a un’infrastruttura robusta e affidabile. Approfitta di prezzi convenienti e della consulenza di esperti.
Python Counter
in combinazione con una semplice stringa
L’efficienza e la praticità di Counter
in Python diventano evidenti quando si applica questa classe a una stringa. Una stringa, in termini tecnici, è una sequenza ordinata di caratteri spazi compresi, racchiusa fra virgolette. Per il nostro esempio scegliamo la seguente stringa:
from collections import Counter
String = "Questo è un esempio."
counter_string = Counter(String)
print(Counter(String))
pythonOra ciascun carattere viene contato come sottostringa. L’output potrebbe essere il seguente:
Counter({'u': 2, 'e': 3, 's': 2, ' ': 3, 't': 1, 'Q': 1, 'o': 2, 'è': 1, 'p': 1, 'n': 1, 'm': 1, '.': 1, 'i':
1})
pythonEstensioni con .update()
Python Counter
può essere usato per numerosi scopi diversi. Uno di questi è la possibilità di ampliare un conteggio esistente. A tal proposito si utilizza il metodo .update()
, che permette di aggiungere nuovi elementi o incrementare il conteggio di quelli esistenti. Di seguito abbiamo creato un semplice esempio basato sul principio descritto sopra, senza modificare la stringa originale:
from collections import Counter
Counter("rosa")
print(Counter(String))
pythonIl risultato ottenuto è il seguente:
Counter({'r' : 1, 'o' : 1, 's' : 1, 'a' : 1})
pythonSe ora usiamo .update()
, il codice si scriverà nel seguente modo:
from collections import Counter
colori = Counter({'r' : 1, 'o' : 1, 's' : 1, 'a' : 1})
colori.update("nero")
print(colori)
pythonL’output viene aggiornato come segue:
Counter({'r' : 2, 'o' : 2, 's' : 1, 'a' : 1, 'n' : 1, 'e' : 1})
pythonAccedere ai valori di Python Counter
Poiché la classe Counter
di Python funziona in modo simile a Dictionary
ti consente di accedere ai valori. Nell’esempio di seguito ti mostriamo alcune varianti e i relativi risultati. A tal proposito “letters” funge da chiavi (keys) e “counts” da valori (values).
from collections import Counter
letters = Counter("pensilina")
letters["n"]
2
letters["i"]
2
pythonfor letter in letters:
print(letter, letters[letter])
p 1
e 1
n 2
s 1
i 2
l 1
a 1
pythonDi seguito presentiamo un possibile esempio con il metodo .keys()
:
for letter in letters.keys():
print(letter, letters[letter])
p 1
e 1
n 2
s 1
i 2
l 1
a 1
pythonQuesto invece è un esempio con .values()
:
for count in letters.values():
print(count)
1
1
2
1
2
1
1
pythonInfine, questo è il metodo .items()
:
for letter, count in letters.items():
print(letter, count)
p 1
e 1
n 2
s 1
i 2
l 1
a 1
pythonCancellare elementi dalla classe
Se vuoi cancellare un elemento da Python Counter
, puoi usare il comando del
:
from collections import Counter
esempio = {'r' : 1, 'o' : 1, 's' : 1, 'a' : 1}
del esempio["r"]
print(Counter(esempio))
pythonQuesto è il nuovo output:
Counter({'o' : 1, 's' : 1, 'a' : 1})
pythonDeterminare gli elementi più frequenti con most_common(n)
Con most_common(n)
per Python Counter
puoi determinare quali elementi ricorrono con maggiore e minore frequenza. Nell’esempio sottostante immaginiamo un prodotto disponibile in diverse varianti di colore, dove per ciascuna variante è indicata la quantità presente in magazzino. Un valore positivo rappresenta la disponibilità effettiva, mentre un valore negativo indica articoli prenotati ma non ancora in magazzino. Per determinare quale variante di colore ha la maggiore disponibilità in magazzino, usiamo il seguente codice:
from collections import Counter
varianti_di_colore = Counter({'rosa' : 2, 'nero' : -1, 'arancione' : 0})
più_articoli = varianti_di_colore.most_common(1)
print(più_articoli)
pythonIn questo caso l’output è:
[('rosa' : 2)]
pythonPossiamo anche cercare gli articoli di cui sono disponibili pochi pezzi. Per farlo modifichiamo il codice come segue:
from collections import Counter
varianti di colore = Counter({'rosa' : 2, 'nero' : -1, 'arancione' : 0})
meno_articoli = varianti_di_colore.most_common()[:-2:-1]
print(meno_articoli)
pythonQuesto è il relativo output:
[('nero' : -1)]
pythonOperazione aritmetica con Python Counter
Con Python Counter
è anche possibile realizzare operazioni aritmetiche. Tuttavia, è bene notare che l’output può contenere solo valori positivi. Nel seguente codice è possibile testare vari tipi di operazione.
Una semplice addizione:
from collections import Counter
x = Counter(a=4, b=2, c=1)
y = Counter(a=2, b=1, c=2)
z = x + y
print(z)
pythonCounter({'a' : 6, 's' : 3, 'c' : 3})
pythonUna sottrazione:
from collections import Counter
x = Counter(a=4, b=2, c=1)
y = Counter(a=2, b=1, c=2)
z = x - y
print(z)
pythonCounter({'a' : 2, 's' : 1})
pythonPoiché il valore ‘c’ è negativo, non viene incluso nella lista.
Ordinare tipi di dati per frequenza
Questa classe consente anche di contare i tipi di dati all’interno di una cartella. A tal proposito immaginiamo una cartella denominata “immagini”, contenente numerosi file con diversi tipi di dati. Per creare una lista usiamo il seguente codice:
import pathlib
from collections import Counter
ordner_pfad = pathlib.Path("Bilder/")
extensions = [entry.suffix for entry in ordner_pfad.iterdir() if entry.is_file()]
extension_counter = Counter(extensions)
print(extension_counter)
pythonEscludere valori negativi e nulli
Per eliminare valori negativi e nulli con Counter
, puoi usare il seguente codice:
from collections import Counter
valori = Counter(a=6, b=0, c=1, d=-4)
valori = +valori
print(valori)
pythonL’output è il seguente:
Counter({'r' : 6, 'c' : 1})
pythonNella nostra Digital Guide trovi tanti altri articoli su questo linguaggio di programmazione. Nei seguenti articoli ti spieghiamo quali operatori Python esistono, come installare Python e ti mostriamo le principali basi di Python corredate di tutorial.