W3docs

Invertendo Strings em Python: Um Guia Completo

Aprenda quatro formas de inverter uma string em Python: fatiamento, reversed(), list.reverse() e recursão — com exemplos executáveis e dicas de desempenho.

Inverter uma string significa mudar a ordem dos seus caracteres para que o último caractere se torne o primeiro, e assim por diante. Python oferece várias formas de fazer isso, cada uma com diferentes compromissos em termos de legibilidade, desempenho e uso de memória.

Este capítulo abrange:

  • O método idiomático de uma linha usando notação de fatia ([::-1])
  • reversed() combinado com join()
  • Uma inversão de lista no local
  • Uma abordagem recursiva (útil para aprendizado, não para produção)
  • Casos de uso práticos: detecção de palíndromos e inversão da ordem das palavras

Strings em Python são imutáveis — nenhum desses métodos modifica a string original; todos retornam uma nova.

Método 1: Notação de Fatia (Recomendado)

A forma mais idiomática em Python de inverter uma string é a fatia estendida [::-1]. A fatia de três partes [start:stop:step] define start e stop como a string completa quando omitidos, e um step de -1 percorre cada caractere de trás para frente.

python— editable, runs on the server

Isso funciona em qualquer sequência — listas, tuplas — não apenas strings. Como a fatia é implementada em C dentro do CPython, ela é a opção mais rápida na prática.

sentence = "Python is great"
print(sentence[::-1])  # taerg si nohtyP

Para uma análise mais aprofundada da sintaxe start/stop/step, consulte o capítulo Slicing Strings.

Método 2: reversed() e join()

A função embutida reversed() retorna um iterador que produz os caracteres do fim para o início. ''.join() coleta esses caracteres em uma nova string.

python— editable, runs on the server

Quando preferir este método ao fatiamento

reversed() é mais explícito quanto à intenção — lê-se como "junte os caracteres invertidos desta string." Algumas equipes o preferem em revisões de código porque não deixa ambiguidade sobre o que a fatia vazia [::-1] significa. Em termos de desempenho, o fatiamento é aproximadamente 5× mais rápido em comprimentos de string típicos por evitar o overhead do iterador.

Método 3: Loop For

Você pode iterar sobre uma string ao contrário e construir uma nova string caractere por caractere. Essa abordagem é verbosa, mas torna o algoritmo visível — útil em contextos de aprendizado.

python— editable, runs on the server

Uma observação sobre concatenação de strings em um loop

Cada += cria um novo objeto string porque strings são imutáveis. Para strings muito longas isso é lento — tempo O(n²). Se você precisar construir uma string invertida um caractere por vez, colete os caracteres em uma lista e junte ao final:

string = "hello world"
chars = []
for char in reversed(string):
    chars.append(char)
reversed_string = ''.join(chars)
print(reversed_string)  # dlrow olleh

Na prática, use fatiamento — mas entender a versão com loop ajuda quando você precisa aplicar filtragem ou transformação enquanto inverte.

Método 4: list.reverse()

Converta a string em uma lista de caracteres, chame o método .reverse() no local e depois junte novamente:

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)

Isso consome mais memória do que a abordagem de fatiamento porque uma cópia completa da lista é criada, mas é explícito e fácil de ler. O método .reverse() está documentado em Python string methods.

Método 5: Recursão

Uma função recursiva chama a si mesma com uma versão menor da string até atingir o caso base (string vazia):

python— editable, runs on the server

Atenção: limite de profundidade de recursão

O limite de recursão padrão do Python é 1000 (sys.getrecursionlimit()). Uma string com mais de ~990 caracteres lançará RecursionError. Use essa abordagem apenas para fins de demonstração; prefira fatiamento ou reversed() em código de produção.

Casos de Uso Práticos

Verificando palíndromos

Um palíndromo é lido da mesma forma de frente para trás e de trás para frente. Inverter e comparar é a verificação mais simples:

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

Invertendo a ordem das palavras em uma frase

Inverter a string inteira é diferente de inverter a ordem das palavras. Para inverter a ordem das palavras, divida em uma lista e inverta-a:

sentence = "Hello World Python"
reversed_words = " ".join(sentence.split()[::-1])
print(reversed_words)  # Python World Hello

Veja Modify Strings para mais técnicas de transformação de strings.

Qual Método Você Deve Usar?

MétodoLegívelRápidoMemóriaUse quando…
[::-1]SimMais rápidoBaixaQuase sempre — este é o idioma Python
reversed() + join()SimRápidoBaixaVocê quer tornar a intenção explícita
Loop forVerbosoLento (O n²)BaixaAprendizado ou quando você precisa filtrar/transformar durante a inversão
list.reverse()SimModeradoMaiorVocê já tem uma lista e quer mutação no local
RecursãoSimLentoPilhaDemonstrações acadêmicas / em entrevistas apenas

Para quase todo código do mundo real, string[::-1] é a escolha certa: é conciso, rápido e imediatamente reconhecível para qualquer desenvolvedor Python.

Prática

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