Recherche de site Web

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.

AlgorithmeTemps d'exécution TimeIt (meilleur de 5)Lenteur
Tranchage0,449 usec1x
Liste reverse()2,46 microsecondes5,48x
reverser() + joindre()5,55x
pour boucle5,5 µs12,25x
boucle while20,94x
Récursion24,3 µs54,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()