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