Python Inverter String – 5 Maneiras e a Melhor

String em Python não possui uma função embutida reverse(). No entanto, existem várias maneiras de inverter uma string em Python.

1. Como Inverter uma String em Python?

Algumas das maneiras comuns de inverter uma string são:

  • Usando Slicing para criar uma cópia invertida da string.
  • Usando um loop for e anexando caracteres na ordem inversa
  • Usando um loop while para iterar pelos caracteres da string na ordem inversa e anexá-los
  • Usando a função join() da string com o iterador reversed()
  • Criando uma lista a partir da string e chamando sua função reverse()
  • Usando Recursão

1.1) Inverter String em Python usando Slicing

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

Se você executar o script Python acima, a saída será:

Reverse String using slicing = FE∂çBA

1.2) Inverter uma String usando o Loop For

def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))

Saída: Inverter String usando loop for = FE∂çBA

1.3) Inverter uma String usando o Loop While

def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))

1.4) Inverter uma String usando join() e reversed()

def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1

1.5) Inverter uma String em Python usando reverse() de Listas

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

1.6) Inverter uma String em Python usando Recursão

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. Melhor Maneira de Inverter uma String em Python

Podemos inverter uma string através de múltiplos algoritmos. Já vimos seis deles. Mas qual deles você deveria escolher para inverter uma string. Podemos usar o módulo timeit para executar múltiplas iterações dessas funções e obter o tempo médio necessário para executá-las. Todas as funções acima estão armazenadas em um script python chamado string_reverse.py. Eu executei todas essas funções uma por uma por 1,00,000 vezes usando o módulo timeit e obtive a média das 5 melhores execuções.

$ 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

A tabela abaixo apresenta os resultados e a lentidão de um algoritmo em relação ao melhor.

Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. Resumo

Devemos usar o slicing para inverter uma string em Python. Seu código é muito simples e pequeno e não precisamos escrever nossa própria lógica para inverter a string. Além disso, é a maneira mais rápida de inverter uma string, conforme identificado pelas execuções de teste acima.

Você pode verificar o script Python completo e mais exemplos de Python em nosso Repositório GitHub.

4. Referências

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string