W3docs

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 con join()
  • 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.

python— editable, runs on the server

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 nohtyP

Para 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.

python— editable, runs on the server

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.

python— editable, runs on the server

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 olleh

En 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):

python— editable, runs on the server

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")) # True

Inversió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 Hello

Consulta Modify Strings para más técnicas de transformación de strings.

¿Qué método deberías usar?

MétodoLegibleRápidoMemoriaÚsalo cuando…
[::-1]El más rápidoBajaCasi siempre — este es el idioma de Python
reversed() + join()RápidoBajaQuieres hacer explícita la intención
Bucle forVerbosoLento (O n²)BajaAprendizaje o cuando necesitas filtrar/transformar mientras inviertes
list.reverse()ModeradoMayorYa tienes una lista y quieres mutación en el lugar
RecursiónLentoPilaSolo 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.

Práctica

Práctica
Which of the following correctly reverses the string 'Python'?
Which of the following correctly reverses the string 'Python'?
Was this page helpful?