Contar palabras en Python sin split ni count

En el post de hoy vamos a ver un algoritmo con Python para contar las ocurrencias de una palabra en una oración (cantidad de veces que se repite la palabra) o cadena sin usar split ni count, además de que no va a importar si la cadena no tiene espacios.

Con el código Python expuesto aquí vas a aprender a contar la cantidad de palabras en un string con la opción de encontrar solo coincidencias completas.

Recuerda que ya anteriormente te enseñé a hacerlo con split y luego incluso contamos el porcentaje.

Explicación del algoritmo

Nota: aquí hay un vídeo explicando esto con más detalles https://youtu.be/dfKpwMvxJVY

Tenemos 2 cosas: la palabra buscada y la cadena en donde vamos a buscar. Debemos devolver la cantidad de veces que la palabra se encuentra en la cadena.

Lo que haremos será recorrer la cadena usando índices numéricos, es decir, desde el 0 hasta la longitud de la cadena menos 1.

En cada recorrido de índice, vamos a cortar la cadena desde el índice hasta el índice + longitud de la palabra buscada para extraer un fragmento.

Lo que estamos haciendo es ir letra por letra buscando la palabra gracias a ese fragmento. Ahora solo resta comparar ese fragmento con la palabra buscada y aumentar el contador.

Al final no vamos a usar ninguna función de Python, además de len (que igualmente puede ser reemplazada por una función propia).

Función en Python

Una vez explicado el algoritmo, veamos la función. Este método recibe la palabra buscada, la cadena y una bandera indicando si solo debe buscar coincidencias completas.

Esta última bandera sirve para saltar al final del fragmento cada que se encuentra una coincidencia. Al ejecutar el código verás a lo que me refiero.

def conteo_palabras(palabra_buscada, cadena, solo_coincidencias_completas=False):
    # Si no se puede usar len, usa: https://parzibyte.me/blog/2019/07/03/python-longitud-cadena-lista-sin-len/
    longitud_palabra_buscada = len(palabra_buscada)
    conteo = 0
    indice = 0
    while indice < len(cadena)-longitud_palabra_buscada+1:
        fragmento = cadena[indice:indice+longitud_palabra_buscada]
        # Lo siguiente solo es para depurar
        print(f"'{fragmento}'", end=",")
        if fragmento == palabra_buscada:
            conteo += 1
            if solo_coincidencias_completas:
                indice += longitud_palabra_buscada
            else:
                indice += 1
        else:
            indice += 1
    return conteo


cadena = "askakanasindsananadsjsdanana"
busqueda = "ana"
conteo_completo = conteo_palabras(busqueda, cadena, False)
print("")
conteo_saltando = conteo_palabras(busqueda, cadena, True)
print(
    f"\nAl buscar {busqueda} en {cadena} el conteo completo es {conteo_completo}, saltando es {conteo_saltando}")

Al ejecutar el código del ejemplo tenemos la siguiente salida:

Python - Contar palabras sin split ni count (ejercicio resuelto)
Python – Contar palabras sin split ni count (ejercicio resuelto)

Si te fijas, cuando saltamos al final del fragmento al encontrar la búsqueda, el conteo es 3 porque no permite que la búsqueda sea parte de otra coincidencia, mientras que cuando permitimos que las palabras estén combinadas el conteo es 5.

Obviamente tú puedes cambiar la búsqueda y la cadena en donde se va a buscar.

Como puedes ver, no usamos la función count ni split de Python, todo lo hicimos con un algoritmo manual.

Así es como podemos encontrar la cantidad de veces que una palabra se repite en una cadena con Python.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario