HOWTO · Python
Como contar as ocorrências de um caractere em uma string Python
Aprenda a contar um caractere em uma string Python com `str.count()` e conheça alternativas como `Counter`, laços e expressões regulares.
Nesta página
Use str.count() para contar um caractere em uma string Python. O método diferencia maiúsculas de minúsculas e também aceita substrings; correspondências sobrepostas não são contadas. Use collections.Counter quando precisar da frequência de todos os caracteres, um laço quando precisar de lógica personalizada e uma expressão regular quando precisar buscar padrões.
Conte um caractere com str.count()
O método de string integrado str.count() é a opção mais simples para contar um caractere ou uma substring literal. Ele recebe o texto a ser procurado e retorna o número de correspondências não sobrepostas. Maiúsculas e minúsculas são tratadas de forma diferente: contar "p" e "P" produz resultados distintos.
Este exemplo independente conta as ocorrências da letra minúscula l em uma string curta. Substitua text e target pelos valores que quiser; se o alvo tiver vários caracteres, o mesmo método contará as correspondências não sobrepostas da substring.
text = "hello, world!"
target = "l"
count = text.count(target)
print(count)
Por exemplo, "aaaa".count("aa") retorna 2, pois as correspondências não se sobrepõem. Se precisar contar substrings sobrepostas, use uma abordagem baseada em padrões e defina explicitamente o comportamento desejado.
Conte todos os caracteres com collections.Counter
collections.Counter, do módulo collections do Python, cria uma tabela de frequências a partir de um iterável, inclusive uma string. É útil quando você precisa contar vários caracteres, e não apenas um. Acesse a contagem de um caractere específico usando colchetes; se o caractere não estiver na entrada, a contagem será 0.
from collections import Counter
text = "hello, world!"
counts = Counter(text)
print(counts["l"])
print(counts)
A primeira consulta responde à pergunta sobre um único caractere, enquanto o objeto Counter contém as contagens de toda a string. Você pode consultar os itens mais frequentes com counts.most_common(). Essa abordagem usa apenas a biblioteca padrão do Python, sem exigir NumPy ou outro pacote de terceiros.
Conte com um laço ou uma compreensão
Um laço explícito deixa visíveis as etapas de comparação e incremento. Isso é útil quando a contagem precisa incluir condições adicionais ou algum processamento personalizado. Para contar caracteres individuais, mantenha o alvo como uma string de um único caractere.
text = "hello, world!"
target = "l"
count = 0
for character in text:
if character == target:
count += 1
print(count)
Uma alternativa concisa usa sum() com uma expressão geradora. Ela soma um para cada caractere correspondente e não precisa criar uma lista intermediária:
text = "hello, world!"
target = "l"
count = sum(character == target for character in text)
print(count)
O laço e a expressão geradora comparam os caracteres da mesma forma que str.count() para um alvo de um único caractere, inclusive ao diferenciar maiúsculas de minúsculas. Para uma contagem simples, str.count() costuma ser mais fácil de ler; escolha a iteração explícita quando ela deixar mais clara a lógica ao redor.
Conte um caractere com uma expressão regular
Use o módulo re da biblioteca padrão quando o alvo for um padrão ou quando a tarefa já envolver expressões regulares. Um caractere isolado nem sempre é interpretado literalmente em uma expressão regular: símbolos como . e * têm significados especiais. Se o alvo vier de uma entrada do usuário e precisar ser tratado como texto literal, passe-o por re.escape() antes de montar o padrão.
import re
text = "hello, world!"
target = "l"
pattern = re.escape(target)
count = len(re.findall(pattern, text))
print(count)
re.findall() retorna as correspondências, e len() as conta. As expressões regulares são mais flexíveis do que uma contagem de string literal, mas acrescentam uma sintaxe de padrões que você precisa conhecer. Para um caractere ou uma substring simples, str.count() é mais direto. Ao buscar um padrão com vários caracteres, confira se o comportamento normal de correspondências não sobrepostas atende à sua necessidade.
Escolha o método adequado
- Use
str.count()para contar um caractere ou uma substring literal. É conciso, diferencia maiúsculas de minúsculas e conta ocorrências de substrings sem sobreposição. - Use
collections.Counterquando precisar de uma tabela de frequências de todos os caracteres ou fizer várias consultas. - Use um laço ou um gerador com
sum()quando precisar tratar cada caractere de forma personalizada durante a análise. - Use
requando a busca realmente envolver um padrão; para tratar como literal um texto fornecido pelo usuário, usere.escape().
Na maioria das perguntas sobre um único caractere, comece com str.count(). As alternativas atendem a necessidades diferentes: estatísticas de todos os caracteres, lógica explícita para cada caractere ou busca por padrões. Para técnicas relacionadas à busca em strings, consulte este tutorial de Python.