1 usuario conectado

Comprimir cadena. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada comprimir_cadena que tome una cadena como entrada y devuelva una versión comprimida de la cadena. La compresión debe funcionar contando las repeticiones consecutivas de caracteres. Por ejemplo, si la entrada es "aaabbcdddaaa", la salida debería ser "a3b2c1d3a3". Si la cadena comprimida no es más corta que la original, la función debería devolver la cadena original.

Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Comprimir cadena

📋 Copiar código


def comprimir_cadena(cadena):
  """
  Comprime una cadena contando las repeticiones consecutivas de caracteres.

  Args:
    cadena: La cadena de entrada.

  Returns:
    La cadena comprimida si es más corta que la original, o la cadena
    original en caso contrario.
  """
  if not cadena:
    return ""

  cadena_comprimida = ""
  caracter_actual = cadena[0]
  contador = 1

  for i in range(1, len(cadena)):
    if cadena[i] == caracter_actual:
      contador += 1
    else:
      cadena_comprimida += caracter_actual + str(contador)
      caracter_actual = cadena[i]
      contador = 1

  # Agregar el último carácter y su conteo
  cadena_comprimida += caracter_actual + str(contador)

  return cadena_comprimida if len(cadena_comprimida) < len(cadena) else cadena

# Ejemplos de uso
cadena1 = "aaabbcdddaaa"
comprimida1 = comprimir_cadena(cadena1)
print(f"'{cadena1}' comprimida es: '{comprimida1}'")

cadena2 = "abc"
comprimida2 = comprimir_cadena(cadena2)
print(f"'{cadena2}' comprimida es: '{comprimida2}'")

cadena3 = "aabbccddeeff"
comprimida3 = comprimir_cadena(cadena3)
print(f"'{cadena3}' comprimida es: '{comprimida3}'")

cadena4 = "a"
comprimida4 = comprimir_cadena(cadena4)
print(f"'{cadena4}' comprimida es: '{comprimida4}'")

cadena5 = ""
comprimida5 = comprimir_cadena(cadena5)
print(f"'{cadena5}' comprimida es: '{comprimida5}'")

 

Explicación del Código:

  1. Definición de la función comprimir_cadena(cadena):

    • Se define una función llamada comprimir_cadena que toma una cadena cadena como argumento.
  2. Manejo de cadena vacía:

    • if not cadena: return "": Si la cadena de entrada está vacía, se devuelve una cadena vacía.
  3. Inicialización de variables:

    • cadena_comprimida = "": Se inicializa una cadena vacía para almacenar la versión comprimida.
    • caracter_actual = cadena[0]: Se establece el primer carácter de la cadena como el caracter_actual para comenzar el conteo.
    • contador = 1: Se inicializa el contador de repeticiones en 1 (para el primer carácter).
  4. Iteración a través de la cadena (a partir del segundo carácter):

    • Se itera a través de la cadena cadena desde el segundo carácter (índice 1) hasta el final.
  5. Conteo de caracteres consecutivos:

    • if cadena[i] == caracter_actual:: Si el carácter actual (cadena[i]) es el mismo que el caracter_actual, se incrementa el contador.
    • else:: Si el carácter actual es diferente del caracter_actual:
      • cadena_comprimida += caracter_actual + str(contador): Se añade el caracter_actual y su contador (convertido a cadena) a la cadena_comprimida.
      • caracter_actual = cadena[i]: Se actualiza el caracter_actual al nuevo carácter.
      • contador = 1: Se reinicia el contador a 1 para el nuevo carácter.
  6. Agregar el último carácter y su conteo:

    • Después del bucle, queda el último carácter y su conteo sin agregar a cadena_comprimida. Se añade al final: cadena_comprimida += caracter_actual + str(contador).
  7. Comparación de longitudes y retorno:

    • return cadena_comprimida if len(cadena_comprimida) < len(cadena) else cadena: Se compara la longitud de la cadena_comprimida con la longitud de la cadena original cadena.
    • Si la cadena comprimida es más corta, se devuelve la cadena_comprimida.
    • En caso contrario (si la cadena comprimida no es más corta o es igual), se devuelve la cadena original cadena.
  8. Ejemplos de uso:

    • Se proporcionan varios ejemplos de cadenas para probar la función, incluyendo casos donde la compresión es efectiva, donde no lo es, cadenas de un solo carácter y cadenas vacías.
    • Para cada ejemplo, se imprime la cadena original y su versión comprimida (o la original si la compresión no la acorta).