Respuestas:
str.count (sub [, inicio [, fin]])
Devuelve el número de ocurrencias no superpuestas de subcadena
sub
en el rango[start, end]
. Argumentos opcionalesstart
yend
se interpretan como en notación de corte.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Como decían otras respuestas, usar el método de cadena count () es probablemente el más simple, pero si lo hace con frecuencia, consulte las colecciones .
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
¿Expresiones regulares tal vez?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
Más información aquí
Python-3.x:
"aabc".count("a")
str.count (sub [, inicio [, fin]])
Devuelve el número de ocurrencias no superpuestas de subcadena sub en el rango [inicio, fin]. Los argumentos opcionales start y end se interpretan como en notación de corte.
str.count(a)
es la mejor solución para contar un solo carácter en una cadena. Pero si necesita contar más caracteres, deberá leer la cadena completa tantas veces como desee.
Un mejor enfoque para este trabajo sería:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Entonces tendrá un dict que devuelve el número de apariciones de cada letra en la cadena y 0
si no está presente.
>>>chars['a']
4
>>>chars['x']
0
Para un contador que no distingue entre mayúsculas y minúsculas, puede anular los métodos mutadores y de acceso subclasificando defaultdict
(los de la clase base son de solo lectura):
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
, que ya es una clase collections
.
Counter
es una clase de Python puro y más hinchado defaultdict
's __missing__
está escrito en C . Para una tarea simple como esta ( int
también se implementa en C), este enfoque es un poco más rápido.
Esta función fácil y directa podría ayudar:
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
. Si le da su nombre a la variable, str
ya no es un tipo incorporado. También estás contando catorce b's catorce veces. Puede evitar eso simplemente cambiando for c in text
con for c in set(text)
.
Las expresiones regulares son muy útiles si desea insensibilidad a mayúsculas y minúsculas (y, por supuesto, todo el poder de la expresión regular).
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))
Tenga en cuenta que la versión regex tarda diez veces más en ejecutarse, lo que probablemente será un problema solo si my_string es tremendamente largo o si el código está dentro de un bucle profundo.
Una forma alternativa de obtener todos los recuentos de caracteres sin usar Counter()
, count
y 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 es la forma más concisa y eficiente de contar la aparición de un carácter en una cadena, pero traté de encontrar una solución usando lambda
algo como esto:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Esto resultará en:
4
Además, hay una ventaja más en esto: si la oración es una lista de subcadenas que contienen los mismos caracteres que arriba, entonces también da el resultado correcto debido al uso de in
. Echar un vistazo :
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Esto también resulta en:
4
Pero, por supuesto, esto solo funcionará cuando se verifique la aparición de un solo carácter, como 'a'
en este caso particular.
Método "Sin usar el recuento para encontrar el carácter deseado en la cadena".
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()
Soy fanático de la biblioteca de pandas, en particular del value_counts()
método. Puede usarlo para contar la aparición de cada carácter en su cadena:
>>> 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
Hay dos formas de lograr esto:
1) Con función incorporada cuenta ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Sin usar una función
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)