Come contare le occorrenze in una lista in Python

Scopri i modi migliori per contare le occorrenze di elementi in un elenco Python. Confronta il metodo count(),collection.Counter e il conteggio del dizionario.

Prova questa soluzione nell'editor

Panoramica

L'analisi dei set di dati spesso richiede il conteggio delle occorrenze dei singoli elementi. Ad esempio, contando quanti voti ha ricevuto ciascun candidato, contando le frequenze delle parole nei file di testo o identificando i duplicati nei registri delle transazioni. Python fornisce diversi strumenti per risolvere questo problema, a seconda che tu stia cercando il conteggio di un singolo elemento o un conteggio completo della frequenza.

Per verificare la frequenza di un singolo elemento specifico, il tipo di elenco integrato fornisce un metodo `.count(value)`. Itera sull'elenco e restituisce un numero intero che conta quante volte appare quel valore esatto. Sebbene sia semplice e leggibile, chiamare `.count()` in un ciclo per ottenere i conteggi per tutti gli elementi è altamente inefficiente, poiché viene eseguito con una complessità O(N^2).

Per contare le frequenze di tutti gli elementi simultaneamente in un unico passaggio, la libreria standard offre la classe "Counter" all'interno del modulo "collections". Passare una lista a "Contatore" restituisce un oggetto simile a un dizionario che rappresenta le frequenze di tutti gli elementi nel tempo O(N). Fornisce inoltre metodi di supporto come `most_common()` per recuperare rapidamente gli elementi principali.

Codice e output di esecuzione

Questo codice dimostra il conteggio dei singoli elementi negli elenchi e il conteggio totale degli elementi utilizzandocollections.Counter.

count_occurrences.py
Prova nell'editor
from collections import Counter

colors = ["red", "blue", "red", "green", "blue", "red"]

# Method 1: Count a single item using list.count()
red_count = colors.count("red")
print("Occurrences of 'red':", red_count)

# Method 2: Count all items using collections.Counter (Fast and powerful)
color_counts = Counter(colors)
print("\nCounter Object:", color_counts)
print("Count of 'blue':", color_counts["blue"])

# Getting the top most common items
print("Most common color:", color_counts.most_common(1))

# Method 3: Counting manually using a loop and a standard dictionary
manual_counts = {}
for item in colors:
    manual_counts[item] = manual_counts.get(item, 0) + 1
print("\nManual dict count:", manual_counts)
Uscita terminale
Occurrences of 'red': 3

Counter Object: Counter({'red': 3, 'blue': 2, 'green': 1})
Count of 'blue': 2
Most common color: [('red', 3)]

Manual dict count: {'red': 3, 'blue': 2, 'green': 1}

Implementazione passo dopo passo

  • Chiama list_variable.count(value) se hai bisogno solo del conteggio di un singolo elemento specifico nell'elenco.
  • Importa raccolte. Conta e passa l'elenco per contare tutti gli elementi univoci in un unico passaggio ottimizzato.
  • Utilizza il metodo .most_common(n) su un oggetto Counter per estrarre i primi n elementi più frequenti.

Domande frequenti

Cosa succede se cerco una chiave mancante in un oggettocollections.Counter?

A differenza di un dizionario standard che solleva un KeyError, un oggetto Counter restituisce 0 per gli elementi mancanti, che rappresentano zero occorrenze.

Qual è la complessità temporale di Counter rispetto al conteggio in un ciclo con list.count()?

Il contatore conta tutti gli elementi nel tempo lineare O(N) passando attraverso l'elenco una volta. L'iterazione sugli elementi dell'elenco e la chiamata a list.count() richiede un tempo quadratico O(N^2), che è estremamente lento per elenchi di grandi dimensioni.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.