Invertir cadenas en Python: una guía completa
Aprende cuatro formas de invertir un string en Python: slicing, reversed(), list.reverse() y recursión — con ejemplos ejecutables y consejos de rendimiento.
Invertir un string significa cambiar el orden de sus caracteres para que el último carácter pase a ser el primero, y así sucesivamente. Python ofrece varias formas de hacerlo, cada una con diferentes compensaciones en legibilidad, rendimiento y uso de memoria.
Este capítulo cubre:
- El idioma en una sola línea usando notación de slice (
[::-1]) reversed()combinado conjoin()- Una inversión de lista en el lugar
- Un enfoque recursivo (útil para aprender, no para producción)
- Casos de uso prácticos: detección de palíndromos e inversión del orden de las palabras
Los strings de Python son inmutables — ninguno de estos métodos modifica el string original; todos devuelven uno nuevo.
Método 1: Notación de slice (recomendado)
La forma más idiomática de Python para invertir un string es el slice extendido [::-1]. El slice de tres partes [start:stop:step] establece start y stop en el string completo cuando se omiten, y un paso de -1 recorre cada carácter hacia atrás.
Esto funciona con cualquier secuencia — listas, tuplas — no solo strings. Como el slice está implementado en C dentro de CPython, es la opción más rápida en la práctica.
sentence = "Python is great"
print(sentence[::-1]) # taerg si nohtyPPara una mirada más profunda a la sintaxis start/stop/step, consulta el capítulo Slicing Strings.
Método 2: reversed() y join()
El built-in reversed() devuelve un iterador que produce caracteres desde el final hasta el principio. ''.join() reúne esos caracteres en un nuevo string.
Cuándo preferir esto sobre slicing
reversed() es más explícito sobre la intención — se lee como "unir los caracteres invertidos de este string". Algunos equipos lo prefieren en revisiones de código porque no deja ambigüedad sobre lo que significa el slice vacío [::-1]. En cuanto al rendimiento, el slicing es aproximadamente 5× más rápido en longitudes de string típicas porque evita la sobrecarga del iterador.
Método 3: Bucle for
Puedes iterar sobre un string en orden inverso y construir un nuevo string carácter por carácter. Este enfoque es verboso pero hace visible el algoritmo — útil en contextos de aprendizaje.
Una nota sobre la concatenación de strings en un bucle
Cada += crea un nuevo objeto string porque los strings son inmutables. Para strings muy largos esto es lento — tiempo O(n²). Si necesitas construir un string invertido un carácter a la vez, reúne los caracteres en una lista y únelos al final:
string = "hello world"
chars = []
for char in reversed(string):
chars.append(char)
reversed_string = ''.join(chars)
print(reversed_string) # dlrow ollehEn la práctica, usa slicing — pero entender la versión con bucle ayuda cuando necesitas aplicar filtrado o transformación mientras inviertes.
Método 4: list.reverse()
Convierte el string en una lista de caracteres, llama al método .reverse() en el lugar, y luego vuelve a unirlos:
string = "hello"
chars = list(string)
chars.reverse() # mutates the list in place
reversed_string = ''.join(chars)
print(reversed_string) # olleh
print(string) # hello (original unchanged)Esto usa más memoria que el enfoque con slice porque se crea una copia completa de la lista, pero es explícito y fácil de leer. El método .reverse() está documentado en Python string methods.
Método 5: Recursión
Una función recursiva se llama a sí misma con una versión más corta del string hasta alcanzar el caso base (string vacío):
Advertencia: límite de profundidad de recursión
El límite de recursión por defecto de Python es 1000 (sys.getrecursionlimit()). Un string de más de ~990 caracteres generará un RecursionError. Usa este enfoque solo con fines demostrativos; prefiere slicing o reversed() en código de producción.
Casos de uso prácticos
Comprobación de palíndromos
Un palíndromo se lee igual hacia adelante y hacia atrás. Invertir y comparar es la verificación más sencilla:
def is_palindrome(text):
cleaned = text.lower().replace(" ", "")
return cleaned == cleaned[::-1]
print(is_palindrome("racecar")) # True
print(is_palindrome("hello")) # False
print(is_palindrome("A man a plan a canal Panama")) # TrueInversión del orden de las palabras en una oración
Invertir el string completo es diferente a invertir el orden de las palabras. Para invertir el orden de las palabras, divide en una lista e inviértela:
sentence = "Hello World Python"
reversed_words = " ".join(sentence.split()[::-1])
print(reversed_words) # Python World HelloConsulta Modify Strings para más técnicas de transformación de strings.
¿Qué método deberías usar?
| Método | Legible | Rápido | Memoria | Úsalo cuando… |
|---|---|---|---|---|
[::-1] | Sí | El más rápido | Baja | Casi siempre — este es el idioma de Python |
reversed() + join() | Sí | Rápido | Baja | Quieres hacer explícita la intención |
| Bucle for | Verboso | Lento (O n²) | Baja | Aprendizaje o cuando necesitas filtrar/transformar mientras inviertes |
list.reverse() | Sí | Moderado | Mayor | Ya tienes una lista y quieres mutación en el lugar |
| Recursión | Sí | Lento | Pila | Solo para demostraciones académicas o en entrevistas |
Para casi todo el código del mundo real, string[::-1] es la elección correcta: es conciso, rápido e inmediatamente reconocible para cualquier desarrollador de Python.