HOWTO · Python
Contar apariciones de un carácter en una cadena en Python
Aprende a contar las apariciones de un carácter en una cadena de Python con `str.count()` y conoce otras opciones para contar caracteres o buscar patrones.
En esta página
Usa str.count() para contar un carácter en una cadena de Python. El método distingue entre mayúsculas y minúsculas y también acepta subcadenas; no cuenta coincidencias superpuestas. Usa collections.Counter para obtener la frecuencia de cada carácter, un bucle si necesitas lógica personalizada y una expresión regular si necesitas buscar patrones.
Cuenta un carácter con str.count()
El método integrado de cadenas str.count() es la opción más sencilla para contar un carácter literal o una subcadena. Recibe el texto que quieres buscar y devuelve el número de coincidencias que no se superponen. Distingue entre mayúsculas y minúsculas, así que contar "p" y "P" produce resultados distintos.
Este ejemplo independiente cuenta las apariciones de l minúscula en una cadena breve. Sustituye text y target por tus propios valores; si el objetivo tiene varios caracteres, el método cuenta las coincidencias de subcadena que no se superponen.
text = "hello, world!"
target = "l"
count = text.count(target)
print(count)
Por ejemplo, "aaaa".count("aa") devuelve 2, porque las coincidencias no se superponen. Si necesitas contar coincidencias superpuestas de una subcadena, utiliza un enfoque basado en patrones y define explícitamente cómo deben coincidir.
Cuenta todos los caracteres con collections.Counter
collections.Counter, del módulo collections de Python, crea una tabla de frecuencias a partir de un iterable, incluidas las cadenas. Es útil cuando necesitas contar varios caracteres, en vez de solo uno. Consulta el recuento de un carácter con corchetes; si el carácter no aparece en la entrada, su recuento es 0.
from collections import Counter
text = "hello, world!"
counts = Counter(text)
print(counts["l"])
print(counts)
La primera consulta responde a la pregunta sobre un solo carácter, mientras que el objeto Counter contiene los recuentos de toda la cadena. Puedes consultar las entradas más frecuentes con counts.most_common(). Este enfoque solo utiliza la biblioteca estándar de Python, así que no requiere NumPy ni ningún otro paquete de terceros.
Cuenta con un bucle o una expresión generadora
Un bucle explícito permite ver claramente los pasos de comparación e incremento. Esto resulta útil cuando el recuento requiere condiciones adicionales o un procesamiento personalizado. Si quieres contar caracteres individuales, usa como objetivo una cadena de un solo carácter.
text = "hello, world!"
target = "l"
count = 0
for character in text:
if character == target:
count += 1
print(count)
Una alternativa concisa utiliza sum() con una expresión generadora. Suma uno por cada carácter que coincide y no necesita crear una lista intermedia:
text = "hello, world!"
target = "l"
count = sum(character == target for character in text)
print(count)
El bucle y la expresión generadora comparan los caracteres igual que str.count() cuando el objetivo tiene un solo carácter, incluido el tratamiento de mayúsculas y minúsculas. Para un recuento sencillo, str.count() suele ser más fácil de leer; usa la iteración explícita cuando aclare la lógica que la rodea.
Cuenta un carácter con una expresión regular
Usa el módulo estándar re cuando el objetivo sea un patrón o cuando la tarea ya requiera expresiones regulares. En una expresión regular, un carácter no siempre se interpreta literalmente: símbolos como . y * tienen significados especiales. Si el objetivo procede de la entrada del usuario y debe tratarse como texto literal, pásalo por re.escape() antes de construir el patrón.
import re
text = "hello, world!"
target = "l"
pattern = re.escape(target)
count = len(re.findall(pattern, text))
print(count)
re.findall() devuelve las coincidencias y len() las cuenta. Las expresiones regulares son más flexibles que un recuento literal de cadenas, pero añaden una sintaxis de patrones que hay que entender. Para un carácter o una subcadena simples, str.count() es más sencillo. Si buscas un patrón de varios caracteres, comprueba que el comportamiento habitual de coincidencias no superpuestas se ajuste a tu tarea.
Elige el método adecuado
- Usa
str.count()para contar un carácter literal o una subcadena. Es conciso, distingue entre mayúsculas y minúsculas y cuenta las apariciones de subcadenas que no se superponen. - Usa
collections.Countercuando necesites una tabla de frecuencias de todos los caracteres o realizar varias consultas. - Usa un bucle o una expresión generadora con
sum()cuando necesites procesar cada carácter de forma personalizada. - Usa
recuando la búsqueda realmente requiera un patrón; aplicare.escape()al texto literal proporcionado por el usuario.
Para la mayoría de las consultas sobre un solo carácter, empieza con str.count(). Las alternativas sirven para otras necesidades: estadísticas de todos los caracteres, lógica explícita para cada carácter o búsqueda de patrones. Para conocer otras técnicas de búsqueda en cadenas, consulta este tutorial de Python.