Python Inverser String – 5 Manières et la Meilleure

Les chaînes Python n’ont pas de fonction reverse() intégrée. Cependant, il existe différentes façons de renverser une chaîne en Python.

1. Comment renverser une chaîne en Python?

Voici quelques-unes des méthodes courantes pour inverser une chaîne :

  • Utilisation du tranchage pour créer une copie inversée de la chaîne.
  • Utilisation d’une boucle for et ajout de caractères dans l’ordre inverse
  • Utilisation d’une boucle while pour itérer sur les caractères de la chaîne dans l’ordre inverse et les ajouter
  • Utilisation de la fonction join() de la chaîne avec l’itérateur reversed()
  • Création d’une liste à partir de la chaîne, puis appel de sa fonction reverse()
  • Utilisation de la récursivité

1.1) Inversion d’une chaîne Python en utilisant le tranchage

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 à l’aide d’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 : Inverser une chaîne à l'aide d'une boucle for = FE∂çBA

1.3) Inverser une chaîne à l’aide d’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 à l’aide de join() et reversed()

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

1.5) Inverser une chaîne Python à l’aide de List reverse()

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

1.6) Inverser une chaîne Python à l’aide de la récursivité

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

2. Meilleure façon de inverser une chaîne en Python

Nous pouvons inverser une chaîne grâce à plusieurs algorithmes. Nous en avons déjà vu six. Mais lequel choisir pour inverser une chaîne ? 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 1,00,000 fois en utilisant le module timeit et 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 à partir du meilleur.

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. Résumé

Nous devrions utiliser le découpage (slicing) pour inverser une chaîne en Python. Son code est très simple et petit, et nous n’avons pas besoin d’écrire notre propre logique pour inverser la chaîne. De plus, c’est la manière la plus rapide d’inverser une chaîne, comme identifié par les exécutions de test ci-dessus.

Vous pouvez consulter le script Python complet et plus d’exemples Python depuis notre Repository GitHub.

4. Références

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