¿Cuál es la forma más sencilla de contar el número de ocurrencias de un personaje en una cadena?
Por ejemplo, contar el número de veces que 'a'
aparece en'Mary had a little lamb'
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?
fuente
len(re.findall('1',bin(10)))
Más información aquí
fuente
Python-3.x:
fuente
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:
Entonces tendrá un dict que devuelve el número de apariciones de cada letra en la cadena y
0
si no está presente.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):fuente
Counter
, que ya es una clasecollections
.Counter
es una clase de Python puro y más hinchadodefaultdict
'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:
fuente
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 cambiandofor c in text
confor 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).
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.
fuente
fuente
fuente
Una forma alternativa de obtener todos los recuentos de caracteres sin usar
Counter()
,count
y regexfuente
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 usandolambda
algo como esto:Esto resultará en:
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 :Esto también resulta en:
Pero, por supuesto, esto solo funcionará cuando se verifique la aparición de un solo carácter, como
'a'
en este caso particular.fuente
Método "Sin usar el recuento para encontrar el carácter deseado en la cadena".
fuente
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:fuente
fuente
Hay dos formas de lograr esto:
1) Con función incorporada cuenta ()
2) Sin usar una función
fuente
No más que este en mi humilde opinión: puede agregar los métodos superiores o inferiores
fuente