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 comjoin()- 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.
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 nohtyPPara 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.
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.
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 ollehNa 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):
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")) # TrueInvertendo 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 HelloVeja Modify Strings para mais técnicas de transformação de strings.
Qual Método Você Deve Usar?
| Método | Legível | Rápido | Memória | Use quando… |
|---|---|---|---|---|
[::-1] | Sim | Mais rápido | Baixa | Quase sempre — este é o idioma Python |
reversed() + join() | Sim | Rápido | Baixa | Você quer tornar a intenção explícita |
| Loop for | Verboso | Lento (O n²) | Baixa | Aprendizado ou quando você precisa filtrar/transformar durante a inversão |
list.reverse() | Sim | Moderado | Maior | Você já tem uma lista e quer mutação no local |
| Recursão | Sim | Lento | Pilha | Demonstraçõ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.