HOWTO · Python

Contare gli elementi in una lista Python

Questo tutorial mostra come contare gli elementi in una lista in Python

In questa pagina

«Contare gli elementi in una lista» può indicare tre attività diverse, e Python offre uno strumento diretto per ciascuna. Usa len() quando ti serve il numero totale di elementi, list.count() quando ti servono le occorrenze di un singolo valore e Counter del modulo collections quando ti serve una frequenza per ogni valore in una volta sola. Un ciclo manuale con un dizionario produce lo stesso risultato di frequenze e mostra esattamente come funziona il conteggio. Questo tutorial illustra ogni metodo con esempi eseguibili, così puoi scegliere l’approccio adatto al tuo compito.

Ottenere il numero totale di elementi con len()

La funzione incorporata len() restituisce il numero di elementi di primo livello in una lista. Funziona con qualsiasi tipo di elemento — numeri, stringhe, booleani o persino altre liste — perché misura la lista stessa, non i valori al suo interno.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

items = [10, "apple", 3.14, [1, 2, 3]]

print(len(items))
4

La lista contiene quattro elementi: un intero, una stringa, un numero in virgola mobile e una lista annidata. len() restituisce 4 perché la lista annidata [1, 2, 3] conta come un singolo elemento al livello esterno. Se devi includere gli elementi contenuti nelle liste annidate, appiattisci prima la struttura oppure somma separatamente le lunghezze delle liste interne — len() non guarda mai oltre il livello superiore.

Contare le occorrenze di un valore con list.count()

Il metodo list.count() restituisce quante volte un determinato valore compare nella lista. Passa il valore che stai cercando ed eseguirà la scansione della lista al posto tuo:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

my_list = [1, 2, 3, 2, 1, 4, 2]

print(my_list.count(2))
print(my_list.count(9))
3
0

Il valore 2 compare tre volte, mentre 9 non compare mai, quindi la seconda chiamata restituisce 0. list.count() funziona con qualsiasi tipo di elemento che la lista può contenere, comprese stringhe e dati misti.

Tieni presente due limitazioni. Ogni chiamata risponde a una domanda su un solo valore, quindi contare tre valori diversi richiede tre chiamate separate — per una distribuzione di frequenza completa, usa invece Counter o un ciclo. Inoltre, su una lista annidata, list.count() confronta solo elementi interi uguali al valore passato; un valore memorizzato all’interno di una lista annidata non viene visto a meno che la lista non venga prima appiattita.

Contare ogni valore con Counter

La classe Counter del modulo collections costruisce una mappa di frequenze per ogni valore in un solo passaggio. Si comporta come un dizionario che associa a ogni elemento il suo conteggio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

from collections import Counter

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = Counter(my_list)

print(element_count)
print(element_count[2])
print(element_count[9])
Counter({2: 3, 1: 2, 3: 1, 4: 1})
3
0

L’indicizzazione di un Counter funziona come quella di un dizionario, con un’utile differenza: la lettura di una chiave mai conteggiata restituisce 0 invece di generare un errore, quindi element_count[9] stampa 0 in modo sicuro.

Poiché internamente ogni valore diventa una chiave del dizionario, ogni elemento deve essere hashable. Interi, stringhe e tuple sono ammessi; una lista annidata no. Per le liste di elementi non hashable, converti prima gli elementi in una forma hashable oppure contali con un approccio diverso.

Costruire un dizionario di frequenze con un ciclo

Un semplice ciclo con un dizionario produce le stesse frequenze e rende visibile il meccanismo. Inizializza un dizionario, quindi incrementa il conteggio per ogni elemento mentre scorri la lista:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = {}

for element in my_list:
    if element in element_count:
        element_count[element] += 1
    else:
        element_count[element] = 1

print(element_count)
{1: 2, 2: 3, 3: 1, 4: 1}

Il risultato associa a ogni valore il suo conteggio: 2 compare tre volte, 1 compare due volte, mentre 3 e 4 compaiono una volta ciascuno. Questo schema richiede un solo passaggio sulla lista e ti dà il pieno controllo — puoi trasformare ogni elemento prima del conteggio, saltare valori selezionati oppure accumulare qualcosa di diverso da un semplice conteggio. Vale lo stesso vincolo di hashabilità: ogni elemento diventa una chiave del dizionario, quindi gli elementi non hashable, come le liste annidate, devono prima essere convertiti o appiattiti.

Per scegliere tra questi strumenti, abbina il metodo alla domanda. Usa len() per il numero totale di elementi, list.count() per un singolo valore e Counter o un ciclo con dizionario per una mappa di frequenze completa.