Expandir cada letra de una cadena con Python - Descomprimir cadena multiplicando carácter por número

Python: expandir letras de cadena según número

Siguiendo con los ejercicios de programación en Python vamos a ver cómo descomprimir o expandir cada letra de una cadena según el número que está junto a ella.

Por ejemplo, si tenemos la siguiente cadena formada por pares de letras y números en donde cada número indica las veces que un carácter debe expandirse:

a1e4o6z9

Al expandirla debe aparecer lo siguiente:

aeeeeoooooozzzzzzzzz

Básicamente estamos descomprimiendo la cadena, justamente lo contrario a cuando agrupamos las letras junto con su conteo haciendo un tipo de resumen.

Explicación del algoritmo

Las reglas dicen que el número solo irá del 1 al 9, por lo que podemos estar seguros de que los números serán solo de un dígito.

Al inicio de todo declaramos una cadena vacía que tendrá el resultado.

Con esto podemos recorrer la cadena “de 2 en 2” recortándola, y en cada iteración obtendríamos una letra junto con el número que debe repetirse.

Por ejemplo, si tenemos a1e4o6z9 en el primer paso tendríamos a1, en el segundo e4 y así sucesivamente; todo en pares.

Entonces ya tenemos el par, en la posición 0 tenemos a la letra y en la 1 al número de veces que se repite.

Extraemos cada cosa, multiplicamos la letra por el número (ya convertido a entero) y concatenamos el resultado en la cadena que declaramos al inicio.

Al final ya habremos expandido la cadena, colocando cada carácter o letra la cantidad de veces que lo indica el número a su derecha.

Expandir letras de cadena con Python

Vayamos al código. Lo he encerrado en una función que recibe la cadena que tiene las letras “comprimidas” y devuelve la cadena expandiendo cada una de sus letras:

def expandir(datos):
    salida = ""
    # Hacer un ciclo "de 2 en 2", es decir, vamos en 0, 2, 4, 6, etcétera
    for i in range(0, len(datos), 2):
        # Extraer la base y cantidad
        par = datos[i:i+2]
        letra = par[0]
        cantidad = int(par[1])
        # Expandimos la base multiplicando la cadena
        letra_expandida = letra * cantidad
        # La agregamos al resultado final
        salida += letra_expandida
    return salida


En la línea 2 declaramos la cadena que tendrá el resultado. Luego usamos range para iterar la cadena en pasos de 2 en 2, es decir, primero vamos en 0, luego 2, 4, hasta la longitud de la cadena.

Más adelante en la línea 6 cortamos la cadena desde el índice hasta el índice + 2, lo que nos dará el par que necesitamos.

Extraemos los valores en la línea 7 y 8 convirtiendo lo necesario, expandimos la letra según el número en la línea 10 y agregamos al resultado en la línea 12.

Poniendo todo junto

El código completo junto con un ejemplo queda como se ve a continuación:

def expandir(datos):
    salida = ""
    # Hacer un ciclo "de 2 en 2", es decir, vamos en 0, 2, 4, 6, etcétera
    for i in range(0, len(datos), 2):
        # Extraer la base y cantidad
        par = datos[i:i+2]
        letra = par[0]
        cantidad = int(par[1])
        # Expandimos la base multiplicando la cadena
        letra_expandida = letra * cantidad
        # La agregamos al resultado final
        salida += letra_expandida
    return salida


print(expandir("a1e4o6z9"))

La salida es la siguiente para este ejemplo:

Expandir cada letra de una cadena con Python - Descomprimir cadena multiplicando carácter por número
Expandir cada letra de una cadena con Python – Descomprimir cadena multiplicando carácter por número

Recuerda que por el momento esto solo funciona con números de un dígito, pero con las modificaciones necesarias podría funcionar con más números sin ningún problema.

Por aquí te dejo más tutoriales de Python.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *