Renverser une chaîne en Python - 5 façons et la meilleure
La chaîne Python n'a pas de fonction reverse() intégrée. Cependant, il existe plusieurs façons d'inverser une chaîne en Python.
1. Comment inverser une chaîne en Python ?
Certaines des façons courantes de renverser une chaîne sont :
- Utiliser le slicing pour créer une copie inversée de la chaîne.
- Utiliser une boucle for et ajouter des caractères dans l'ordre inverse
- Utiliser une boucle while pour itérer sur les caractères d'une chaîne dans l'ordre inverse et les ajouter.
- Utiliser la fonction join() de chaîne avec l'itérateur reversed()
- Créer une liste à partir de la chaîne et ensuite appeler sa fonction
reverse() - Utiliser la récursion
1.1) Inverser une chaîne Python en utilisant le découpage
def reverse_slicing(s):
return s[::-1]
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('Reverse String using slicing =', reverse_slicing(input_str))
Si vous exécutez le script Python ci-dessus, la sortie sera :
Reverse String using slicing = FE∂çBA
1.2) Inverser une chaîne de caractères en utilisant une boucle 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))
Sortie : Inverse de la chaîne en utilisant une boucle for=FE∂çBA
1.3) Inverser une chaîne en utilisant une boucle 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) Inverser une chaîne en utilisant join() et reversed()
def reverse_join_reversed_iter(s):
s1 = ''.join(reversed(s))
return s1
1.5) Python Inverser une chaîne en utilisant la fonction reverse() de la liste
def reverse_list(s):
temp_list = list(s)
temp_list.reverse()
return ''.join(temp_list)
1.6) Inverser une chaîne Python en utilisant la récursion
def reverse_recursion(s):
if len(s) == 0:
return s
else:
return reverse_recursion(s[1:]) + s[0]
2. Meilleure façon d'inverser une chaîne en Python
Nous pouvons inverser une chaîne de caractères par le biais de plusieurs algorithmes. Nous en avons déjà vu six. Mais lequel d'entre eux devriez-vous choisir pour inverser une chaîne de caractères. Nous pouvons utiliser le module timeit pour exécuter plusieurs itérations de ces fonctions et obtenir le temps moyen nécessaire pour les exécuter. Toutes les fonctions ci-dessus sont stockées dans un script Python nommé string_reverse.py. J'ai exécuté toutes ces fonctions une par une 100 000 fois en utilisant le module timeit et j'ai obtenu la moyenne des 5 meilleures exécutions.
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
Le tableau ci-dessous présente les résultats et la lenteur d'un algorithme par rapport au meilleur.
| Algorithme | Temps d'exécution TimeIt (meilleur de 5) | Lenteur |
|---|---|---|
| Tranchage | 0,449 usec | 1x |
| Liste reverse() | 2,46 microsecondes | 5,48x |
| reverser() + joindre() | 5,55x | |
| pour boucle | 5,5 µs | 12,25x |
| boucle while | 20,94x | |
| Récursion | 24,3 µs | 54,12x |
3. Résumé
Nous devrions utiliser le découpage pour inverser une chaîne en Python. Son code est très simple et court et nous n'avons pas besoin d'écrire notre propre logique pour inverser la chaîne. De plus, c'est la façon la plus rapide d'inverser une chaîne, comme l'ont identifié les test de performances ci-dessus.
Vous pouvez consulter le script Python complet et d'autres exemples de Python sur notre dépôt GitHub.
4. Références
- Documentation de l'API reversed()
- Documentation de l'API str.join()

