¿Cuál es la forma más simple de contar el número de ocurrencias de un carácter en una cadena?Cuenta el número de ocurrencias de un carácter en una cadena
p. Ej. contar el número de veces 'a'
aparece en 'Mary had a little lamb'
¿Cuál es la forma más simple de contar el número de ocurrencias de un carácter en una cadena?Cuenta el número de ocurrencias de un carácter en una cadena
p. Ej. contar el número de veces 'a'
aparece en 'Mary had a little lamb'
str.count(sub[, start[, end]])
devolver el número de ocurrencias no solapados de subcadena
sub
en el intervalo[start, end]
. Los argumentos opcionalesstart
yend
se interpretan como en notación de división.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
¿Expresiones regulares quizás?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
Una buena idea, pero exagerada en este caso. El método de cadena 'conteo' hace lo mismo con la ventaja añadida de ser inmediatamente obvio sobre lo que está haciendo. – nilamo
por qué tasa negativa, tal vez alguien necesita este tipo de código para algo similar. mi voto hasta – kiltek
de acuerdo con kiltek - esto es sólo el caso más general ... –
Puede utilizar count():
>>> 'Mary had a little lamb'.count('a')
4
myString.count('a');
más información here
"aabc".count("a")
Como otras respuestas Dicho esto, mediante el recuento método de cadena() es probablemente la más simple , pero si lo haces con frecuencia, mira collections.Counter:
from collections import Counter
str = "Mary had a little lamb"
counter = Counter(str)
print counter['a']
¿Por qué es esto mejor cuando se usa con frecuencia? ¿Cuál es la ventaja? – meshy
Si quiere los conteos de muchas de las letras en una cadena dada, Counter las proporciona todas de una forma más sucinta. Si desea contar una letra de una gran cantidad de cadenas diferentes, Counter no proporciona ningún beneficio. –
@BrendenBrown ¿Hay una diferencia de rendimiento notable? –
Las expresiones regulares son muy útiles si quieres caso insensibilidad (y, por supuesto, todo el poder de expresiones regulares).
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 de expresiones regulares toma del orden de diez veces más tiempo para funcionar, lo que probablemente será un problema sólo si mi_cadena es tremendamente largo, o el código está dentro de un bucle de profundidad.
Regex es exagerado si solo está tratando de corregir la sensibilidad de mayúsculas y minúsculas. my_sting.lower(). count ('m') es más eficiente, más claro y más sucinto. –
"Sin usar el contador para buscar el carácter que desee en la cadena" método.
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()
¿Por qué la función de conteo vacío? ¿Por qué la función main()?¿Por qué los espacios feos en todas partes? Esta NO es una buena respuesta. – bugmenot123
a = 'have a nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
print key, a.count(key)
spam = 'have a nice day'
var = 'd'
def count(spam, var):
found = 0
for key in spam:
if key == var:
found += 1
return found
count(spam, var)
print 'count %s is: %s ' %(var, count(spam, var))
No más de esto en mi humilde opinión - puede agregar los métodos superiores o inferiores
def count_letter_in_str(string,letter):
return string.count(letter)
str = "count a character occurance"
List = list(str)
print (List)
Uniq = set(List)
print (Uniq)
for key in Uniq:
print (key, str.count(key))
str.count(a)
es la mejor solución para contar un único carácter en una cadena . Pero si necesita contar más caracteres que uno, tendrá que leer la cadena tantas veces como los caracteres que quiera contar.
Un mejor enfoque para este trabajo sería:
from collections import defaultdict
string = 'Mary had a little lamb'
chars = defaultdict(int)
for char in string:
chars[char] += 1
por lo que tendrá un diccionario que devuelve el número de ocurrencias de cada letra de la cadena y 0
si no está presente.
>>>chars['a']
4
>>>chars['x']
0
Básicamente está reimplementando 'Counter', que ya es una clase en' collections'. – merv
@merv Realmente no. 'Counter' es una clase Python pura más inflada y' __missing__' de 'defaultdict' está [escrita en C] (https://hg.python.org/cpython/file/7272ef213b7c/Modules/_collectionsmodule.c#l1484) . Para una tarea simple como esta ('int' también se implementa en C) este enfoque es ligeramente más rápido. –
Esto le dará la ocurrencia de cada carácter en una cadena.O/P es también en formato de cadena:
def count_char(string1):
string2=""
lst=[]
lst1=[]
for i in string1:
count=0
if i not in lst:
for j in string1:
if i==j:
count+=1
lst1.append(i)
lst1.append(count)
lst.append(i)
string2=''.join(str(x) for x in lst1)
return string2
print count_char("aabbacddaabbdsrchhdsdg")
count
es sin duda la forma más concisa y eficiente de contar la ocurrencia de un carácter en una cadena pero traté de llegar a una solución con lambda
, algo como esto:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
esto dará como resultado:
4
Además, hay una ventaja más de esto si la oración es una lista de subcadenas que contienen los mismos caracteres que los anteriores, y 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 se traduce en:
4
Pero, por supuesto, esto va a funcionar sólo cuando la comprobación ocurrencia de carácter individual como 'a'
en este caso particular.
string.count! Eso es súper conveniente – peterb