Python Reverso de Cadena – 5 Formas y la Mejor

La cadena de Python no tiene una función reverse() incorporada. Sin embargo, hay varias formas de revertir una cadena en Python.

1. ¿Cómo revertir una cadena en Python?

Algunas de las formas comunes de revertir una cadena son:

  • Usar Slicing para crear una copia invertida de la cadena.
  • Usar un bucle for y agregar caracteres en orden inverso
  • Usar un bucle while para iterar los caracteres de la cadena en orden inverso y agregarlos
  • Usar la función join() de cadena con el iterador reversed()
  • Crear una lista a partir de la cadena y luego llamar a su función reverse()
  • Usar Recursión

1.1) Revertir cadena de Python usando Slicing

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

Si ejecutas el script de Python anterior, la salida será:

Reverse String using slicing = FE∂çBA

1.2) Invertir una cadena usando un bucle For

def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))

Salida: Invertir una cadena usando un bucle for = FE∂çBA

1.3) Invertir una cadena usando un bucle While

def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))

1.4) Invertir una cadena usando join() y reversed()

def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1

1.5) Invertir una cadena en Python usando reverse() de lista

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

1.6) Invertir una cadena en Python usando recursión

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. La mejor manera de invertir una cadena en Python

Podemos invertir una cadena a través de múltiples algoritmos. Ya hemos visto seis de ellos. Pero ¿cuál de ellos deberías elegir para invertir una cadena? Podemos usar el módulo timeit para ejecutar múltiples iteraciones de estas funciones y obtener el tiempo promedio requerido para ejecutarlas. Todas las funciones anteriores están almacenadas en un script de Python llamado string_reverse.py. Ejecuté todas estas funciones una por una 100,000 veces usando el módulo timeit y obtuve el promedio de las 5 mejores ejecuciones.

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop

La siguiente tabla presenta los resultados y la lentitud de un algoritmo desde el mejor.

Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. Resumen

Deberíamos usar el slicing para invertir una cadena en Python. Su código es muy simple y pequeño y no necesitamos escribir nuestra propia lógica para invertir la cadena. Además, es la forma más rápida de invertir una cadena según lo identificado por las ejecuciones de prueba anteriores.

Puedes consultar el script completo de Python y más ejemplos de Python desde nuestro Repositorio de GitHub.

4. Referencias

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string