Respostas:
str.count (sub [, início [, fim]])
Retorne o número de ocorrências não sobrepostas de substring
sub
no intervalo[start, end]
. Argumentos opcionaisstart
eend
são interpretados como na notação de fatia.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Como outras respostas disseram, usar o método string (count) é provavelmente o mais simples, mas se você estiver fazendo isso com frequência, confira as coleções .
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Expressões regulares, talvez?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
mais informações aqui
Python-3.x:
"aabc".count("a")
str.count (sub [, início [, fim]])
Retorne o número de ocorrências não sobrepostas da subcadeia de substring no intervalo [start, end]. Os argumentos opcionais start e end são interpretados como na notação de fatia.
str.count(a)
é a melhor solução para contar um único caractere em uma string. Mas se você precisar contar mais caracteres, terá que ler a sequência inteira quantas vezes quiser.
Uma abordagem melhor para este trabalho seria:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Portanto, você terá um ditado que retorna o número de ocorrências de todas as letras da string e, 0
se não estiver presente.
>>>chars['a']
4
>>>chars['x']
0
Para um contador que não diferencia maiúsculas de minúsculas, você pode substituir os métodos mutador e acessador subclassificando defaultdict
(os da classe base são somente leitura):
class CICounter(defaultdict):
def __getitem__(self, k):
return super().__getitem__(k.lower())
def __setitem__(self, k, v):
super().__setitem__(k.lower(), v)
chars = CICounter(int)
for char in text:
chars[char] += 1
>>>chars['a']
4
>>>chars['M']
2
>>>chars['x']
0
Counter
, o que já é uma classe collections
.
Counter
é uma classe Python puro mais inchado e defaultdict
's __missing__
é escrita em C . Para uma tarefa simples como esta ( int
também é implementada em C), essa abordagem é levemente mais rápida.
Essa função fácil e direta pode ajudar:
def check_freq(x):
freq = {}
for c in x:
freq[c] = str.count(c)
return freq
check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}
str
. Se você der seu nome à variável, str
não será mais um tipo interno. Além disso, você está contando catorze vezes c de c 14. Você pode evitar isso simplesmente mudando for c in text
com for c in set(text)
.
Expressões regulares são muito úteis se você deseja fazer distinção entre maiúsculas e minúsculas (e, claro, todo o poder do regex).
my_string = "Mary had a little lamb"
# simplest solution, using count, is case-sensitive
my_string.count("m") # yields 1
import re
# case-sensitive with regex
len(re.findall("m", my_string))
# three ways to get case insensitivity - all yield 2
len(re.findall("(?i)m", my_string))
len(re.findall("m|M", my_string))
len(re.findall(re.compile("m",re.IGNORECASE), my_string))
Esteja ciente de que a versão regex demora dez vezes mais tempo para ser executada, o que provavelmente será um problema apenas se my_string for tremendamente longo ou se o código estiver dentro de um loop profundo.
Uma forma alternativa de obter todas as contagens de caracteres sem usar Counter()
, count
e regex
counts_dict = {}
for c in list(sentence):
if c not in counts_dict:
counts_dict[c] = 0
counts_dict[c] += 1
for key, value in counts_dict.items():
print(key, value)
count
é definitivamente a maneira mais concisa e eficiente de contar a ocorrência de um caractere em uma string, mas tentei encontrar uma solução usando lambda
, algo como isto:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Isso resultará em:
4
Além disso, há mais uma vantagem disso: se a sentença for uma lista de sub-strings contendo os mesmos caracteres que acima, isso também fornecerá o resultado correto devido ao uso de in
. Dar uma olhada :
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Isso também resulta em:
4
Mas é claro que isso funcionará apenas ao verificar a ocorrência de um único caractere, como 'a'
neste caso em particular.
"Sem usar count para encontrar o caractere em string".
import re
def count(s, ch):
pass
def main():
s = raw_input ("Enter strings what you like, for example, 'welcome': ")
ch = raw_input ("Enter you want count characters, but best result to find one character: " )
print ( len (re.findall ( ch, s ) ) )
main()
Sou fã da biblioteca de pandas, em particular o value_counts()
método. Você pode usá-lo para contar a ocorrência de cada caractere na sua string:
>>> import pandas as pd
>>> phrase = "I love the pandas library and its `value_counts()` method"
>>> pd.Series(list(phrase)).value_counts()
8
a 5
e 4
t 4
o 3
n 3
s 3
d 3
l 3
u 2
i 2
r 2
v 2
` 2
h 2
p 1
b 1
I 1
m 1
( 1
y 1
_ 1
) 1
c 1
dtype: int64
Python 3
Existem duas maneiras de conseguir isso:
1) Com contagem de funções incorporada ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Sem usar uma função
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)