Python Reverse String – 5 Modi e il Migliore

Il linguaggio Python non dispone di una funzione built-in reverse() per le stringhe. Tuttavia, ci sono vari modi per invertire una stringa in Python.

1. Come invertire una stringa in Python?

Alcuni dei modi comuni per invertire una stringa sono:

  • Utilizzare il Slicing per creare una copia inversa della stringa.
  • Utilizzare un ciclo for e aggiungere i caratteri in ordine inverso
  • Utilizzare un ciclo while per iterare i caratteri della stringa in ordine inverso e aggiungerli
  • Utilizzare la funzione join() della stringa con l’iteratore reversed()
  • Creare una lista dalla stringa e poi chiamare la sua funzione reverse()
  • Utilizzare la ricorsione

1.1) Invertire una stringa in Python usando il 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 esegui lo script Python sopra, l’output sarà il seguente:

Reverse String using slicing = FE∂çBA

1.2) Inverti una stringa usando il ciclo 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))

Output: Inverti una stringa usando il ciclo for = FE∂çBA

1.3) Inverti una stringa usando il ciclo 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) Inverti una stringa usando join() e reversed()

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

1.5) Inverti una stringa Python usando reverse() della lista

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

1.6) Inverti una stringa Python usando la ricorsione

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

2. Miglior Modo per Invertire una Stringa in Python

Possiamo invertire una stringa attraverso vari algoritmi. Ne abbiamo già visti sei. Ma quale di essi dovresti scegliere per invertire una stringa. Possiamo utilizzare il modulo timeit per eseguire più iterazioni di queste funzioni e ottenere il tempo medio necessario per eseguirle. Tutte le funzioni sopra sono memorizzate in uno script Python chiamato string_reverse.py. Ho eseguito tutte queste funzioni una per una per 100.000 volte utilizzando il modulo timeit e ho ottenuto la media dei migliori 5 risultati.

$ 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

La tabella seguente presenta i risultati e la lentezza di un algoritmo rispetto al migliore.

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

Dovremmo utilizzare lo slicing per invertire una stringa in Python. Il suo codice è molto semplice e piccolo e non abbiamo bisogno di scrivere la nostra logica per invertire la stringa. Inoltre, è il modo più veloce per invertire una stringa come identificato dalle esecuzioni di test sopra.

Puoi controllare lo script Python completo e altri esempi Python dal nostro Repository GitHub.

4. Riferimenti

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