Python String no tiene una función reverse() incorporada. Sin embargo, existen varias formas de invertir una cadena en Python.
1. ¿Cómo invertir una cadena en Python?
Algunas de las formas comunes de invertir una cadena son:
- Usar Slicing para crear una copia inversa de la cadena.
- Uso del bucle for y adición de caracteres en orden inverso
- Uso del bucle while para iterar caracteres de cadena en orden inverso y agregarlos
- Uso de la función join() de cadena con el iterador reversed()
- Crear una lista a partir de la cadena y luego llamar a su
reverse()función - Usando recursión
1.1) Invertir cadena con Python mediante segmentación
def reverse_slicing(s): return s[::-1]input_str = 'ABç∂EF'if __name__ == "__main__": print('Reverse String using slicing =', reverse_slicing(input_str))
Si ejecuta el script de Python anterior, el resultado será:
Reverse String using slicing = FE∂çBA
1.2) Invertir cadena usando bucle For
def reverse_for_loop(s): s1 = '' for c in s: s1 = c + s1 # appending chars in reverse order return s1input_str = 'ABç∂EF'if __name__ == "__main__": print('Reverse String using for loop =', reverse_for_loop(input_str))
Producción:Reverse String using for loop = 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 s1input_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 cadena en Python usando List reverse()
def reverse_list(s): temp_list = list(s) temp_list.reverse() return ''.join(temp_list)
1.6) Invertir cadena en Python mediante recursión
def reverse_recursion(s): if len(s) == 0: return s else: return reverse_recursion(s[1:]) + s[0]
2. La mejor forma de invertir una cadena en Python
Podemos invertir una cadena mediante múltiples algoritmos. Ya hemos visto seis de ellos. Pero, ¿cuál de ellos debería 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 se almacenan 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 mejores 5 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 del mejor.
| Algoritmo | Tiempo de ejecución de TimeIt (mejor de 5) | Lentitud |
|---|---|---|
| Rebanar | 0,449 segundos de uso | 1x |
| Lista inversa() | 2,46 segundos de uso | 5,48x |
| revertido() + unir() | 2,49 segundos de uso | 5,55x |
| bucle for | 5,5 segundos de uso | 12,25x |
| bucle while | 9,4 segundos de uso | 20,94x |
| Recursión | 24,3 segundos de uso | 54,12x |
3. Resumen
Deberíamos usar la segmentación 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, como se identifica en las ejecuciones de prueba anteriores.
Puede consultar el script de Python completo y más ejemplos de Python en nuestro repositorio de GitHub .
4. Referencias
- Documentación de la API reversed()
- Documentación de la API str.join()