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