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.Counter cuando 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 re cuando la búsqueda realmente requiera un patrón; aplica re.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.