En muchas ocasiones nos hemos o veremos necesitados de contar las apariciones de un carácter en una cadena de Python, para lo cual tenemos diferente opciones.
En dependencia de nuestra necesidad, o el módulo con el que nos encontremos trabajando, podremos hacerlo por una vía u otra
for
Podemos recorrer la cadena, crear un contador e incrementarlo en uno cada vez que encuentre en carácter que buscamos.
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
contador = 0
for i in cadena:
if i == "a":
contador = contador + 1
print(contador)
salida
8
count
La función count()
, devuelve de un modo sencillo, cúantos caracteres iguales al que e le pasa como parámetro, existen en la cadena.
Sintaxis
array.count('x')
Aquí, dos modos de implementarla:
a = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'.count('n')
print(a)
print('Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'.count('a'))
salida
6
8
Una función lambda
Una lambda en Python, es la mínima función que se puede expresar dentro de una expresión.
Por tanto para contar caracteres con una función lambda
, podemos plantearlo con la función map()
que aplicará sobre cada integrante de la lista una acción que en nuestro caso será dar valor 1 y luego lo sumaremos con la función sum()
.
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
# utilizamos las funciones map y sum, un bucle if - else la funcion map y sum,
# lammbda parametro . accion, donde se ejecuta
print(sum(map(lambda x : 1 if 'a' in x else 0, cadena)))
salida
8
defaultdict
defaultdict()
, pertenece al modulo collections
. Permite contar los elementos dados dentro de una cadena y devuelve un valor 0 si el carácter no existe.
from collections import defaultdict
cita = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
chars = defaultdict(int) #creamos el objeto con el parámetro int
for char in cita: #empleamos un for para recorrer la cadena
chars[char] += 1
print(chars['a'])
print(chars['e'])
print(chars['i'])
print(chars['o'])
print(chars['u'])
print(chars['l'])
print(chars['m'])
print(chars['n'])
print(chars['u'])
print(chars['z']) #caracter que no existe
print(chars['h']) #caracter que no existe
print(chars['v'])
salida
8
13
3
4
3
2
2
6
3
0
0
1
collections.counter
counter()
es una subclase de dictado para contar objetos hash, o sea datos estructurados de forma que asocian llaves o claves con valores.
En esta colección, los elementos se almacenan como claves de diccionario y sus recuentos se almacenan como valores de diccionario. El conteo puede arrojar cualquier cualquier valor entero, incluido el cero, o valores negativos. Counter devuelve cero para elementos inexistentes.
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
from collections import Counter
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
counter = Counter(cadena)
print(counter['a'])
print(counter['x'])
salida
8
0
Otros artículos sobre Python
pandas.df.value_count
La librería Pandas por supuesto, también ofrece una funcion simple para contar caracteres en una cadena.
Debemos primero convertir la cadena a un dataframe o serie pandas y luego aplicarle la función value.count()
, como se ve en el ejemplo:
import pandas as pd
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
print(pd.Series(list(cadena)).value_counts())
salida
14
e 13
a 8
n 6
s 5
d 5
o 4
r 4
u 3
c 3
i 3
l 2
m 2
p 2
t 2
, 1
v 1
ñ 1
Q 1
g 1
b 1
. 1
dtype: int64
re y findall trabajando con expresiones regulares
El modulo re
y la función findall()
, nos permiten trabajar con expresiones regulares. Digamos que una expresión regular, es una sintaxis dada que está contenida en un patrón. Si hacemos coincidir es patrón con nuestro parámetro de búsqueda, obtendremos los elementos que se repiten.
import re
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
print(len(re.findall("a", cadena)))
Y hasta aquí, espero sinceramente que esto sirva de ayuda a alguien.
Por mucho tiempo que este un tronco en el agua, nunca llegará a ser cocodrilo.
D.