HOWTO · Python

Conta le occorrenze di un carattere in una stringa in Python

Scopri come contare un carattere in una stringa Python con `str.count()` e quando usare `Counter`, un ciclo o le espressioni regolari.

In questa pagina

Usa str.count() per contare un carattere in una stringa Python. Il metodo distingue tra maiuscole e minuscole e accetta anche sottostringhe, contando solo le corrispondenze non sovrapposte. Per ottenere la frequenza di ogni carattere puoi usare collections.Counter, mentre un ciclo è utile per applicare logiche personalizzate e un’espressione regolare per cercare pattern.

Conta un carattere con str.count()

Il metodo integrato per le stringhe str.count() è la scelta più semplice per contare un carattere o una sottostringa letterale. Riceve il testo da cercare e restituisce il numero di corrispondenze non sovrapposte. Distingue tra maiuscole e minuscole: contare "p" e "P" produce risultati separati.

Questo esempio completo conta le l minuscole in una stringa breve. Sostituisci text e target con i tuoi valori; se il testo da cercare contiene più caratteri, lo stesso metodo conta le corrispondenze non sovrapposte della sottostringa.

text = "hello, world!"
target = "l"

count = text.count(target)
print(count)

Per esempio, "aaaa".count("aa") restituisce 2, perché le corrispondenze non si sovrappongono. Se devi contare sottostringhe sovrapposte, usa un approccio basato su pattern e definisci esplicitamente il comportamento di ricerca desiderato.

Conta ogni carattere con collections.Counter

collections.Counter, nel modulo collections di Python, crea una tabella delle frequenze a partire da un iterabile, incluse le stringhe. È utile quando vuoi contare più caratteri, anziché uno solo. Puoi ottenere il conteggio di un carattere specifico usando le parentesi quadre; se il carattere non compare nel testo, il conteggio è 0.

from collections import Counter

text = "hello, world!"
counts = Counter(text)

print(counts["l"])
print(counts)

La prima ricerca risponde alla domanda sul singolo carattere, mentre l’oggetto Counter contiene i conteggi dell’intera stringa. Puoi consultare gli elementi più frequenti con counts.most_common(). Questo approccio usa solo la libreria standard di Python e non richiede NumPy né altri pacchetti di terze parti.

Conta con un ciclo o una comprensione

Un ciclo esplicito rende visibili i passaggi di confronto e incremento. È utile quando il conteggio deve includere condizioni aggiuntive o elaborazioni personalizzate. Se vuoi contare singoli caratteri, mantieni il valore cercato come stringa di un solo carattere.

text = "hello, world!"
target = "l"
count = 0

for character in text:
    if character == target:
        count += 1

print(count)

Un’alternativa concisa usa sum() con un’espressione generatrice. Somma uno per ogni carattere corrispondente senza creare una lista intermedia:

text = "hello, world!"
target = "l"

count = sum(character == target for character in text)
print(count)

Il ciclo e l’espressione generatrice confrontano i caratteri come fa str.count() quando il testo cercato è un singolo carattere, distinguendo anche tra maiuscole e minuscole. Per un conteggio semplice, str.count() è in genere più leggibile; scegli l’iterazione esplicita quando rende più chiara la logica circostante.

Conta un carattere con un’espressione regolare

Usa il modulo re della libreria standard quando il testo cercato è un pattern o quando il compito prevede già l’uso delle espressioni regolari. In un’espressione regolare un carattere non viene sempre interpretato alla lettera: simboli come . e * hanno significati speciali. Se il testo proviene dall’input dell’utente e deve essere cercato letteralmente, passalo a re.escape() prima di creare il pattern.

import re

text = "hello, world!"
target = "l"
pattern = re.escape(target)
count = len(re.findall(pattern, text))
print(count)

re.findall() restituisce le corrispondenze e len() le conta. Le espressioni regolari sono più flessibili di una ricerca letterale, ma richiedono di conoscere la sintassi dei pattern. Per un carattere o una sottostringa semplice, str.count() è più immediato. Se cerchi un pattern composto da più caratteri, verifica che il normale comportamento di ricerca non sovrapposta sia adatto al tuo caso.

Scegli il metodo più adatto

  • Usa str.count() per contare un carattere o una sottostringa letterale. È conciso, distingue tra maiuscole e minuscole e conta solo le occorrenze non sovrapposte delle sottostringhe.
  • Usa collections.Counter quando ti serve una tabella delle frequenze di tutti i caratteri o devi eseguire più ricerche.
  • Usa un ciclo o un generatore con sum() quando devi elaborare ogni carattere con una logica personalizzata.
  • Usa re quando la ricerca riguarda davvero un pattern; per cercare alla lettera un testo fornito dall’utente, applica re.escape().

Per la maggior parte delle domande sul conteggio di un singolo carattere, parti da str.count(). Le alternative rispondono a esigenze diverse: statistiche su tutti i caratteri, logica esplicita per ciascun carattere o ricerca tramite pattern. Per altre tecniche di ricerca nelle stringhe, consulta questo tutorial di Python.