HOWTO · Python

Gamme à l'envers en Python

Ce tutoriel explique comment parcourir des nombres et des séquences à l’envers en Python avec la fonction `range()`, `reversed()`, le découpage en tranches et une boucle `while`.

Sur cette page

La méthode pour parcourir des éléments à l’envers en Python dépend de ce que vous voulez visiter. Utilisez un range() décroissant pour des valeurs numériques, reversed() pour parcourir une séquence existante sans la modifier, ou le découpage en tranches si vous avez besoin d’une copie inversée.

Utiliser range() avec un pas négatif

range(start, stop, step) produit des valeurs de start vers stop, mais n’inclut jamais stop. Un pas négatif fait décroître les valeurs. Par exemple, pour compter de 10 à 1, commencez à 10 et utilisez 0 comme borne d’arrêt exclusive :

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

for number in range(10, 0, -1):
    print(number)

Pour inclure zéro dans un compte à rebours à partir de 100, utilisez range(100, -1, -1) : la borne d’arrêt doit être inférieure d’une unité à la dernière valeur souhaitée. Avec un pas négatif, un départ déjà inférieur à la borne d’arrêt ne permet pas de compter à rebours. Choisissez le départ, l’arrêt et le pas de façon qu’ils évoluent dans le même sens. range() est utile lorsque la boucle doit parcourir des nombres, comme des indices ou un compte à rebours, plutôt que les éléments d’une collection.

Utiliser reversed() pour parcourir une séquence

Utilisez reversed() pour visiter les éléments d’une séquence existante du dernier au premier. Cette fonction renvoie un itérateur et laisse la séquence d’origine intacte. Elle fonctionne notamment avec les listes, les chaînes de caractères et les plages numériques, ainsi qu’avec d’autres objets réversibles.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

items = ["first", "second", "third"]
for item in reversed(items):
    print(item)

Dans cet exemple, les valeurs affichées (first, second, third) restent en anglais. Pour une séquence numérique, reversed(range(5)) parcourt les valeurs de 4 à 0. Préférez cette forme lorsque les valeurs proviennent déjà d’une plage ; utilisez un range() à pas négatif si vous souhaitez définir directement l’intervalle numérique décroissant. Comme reversed() renvoie un itérateur, il ne crée pas une seconde liste uniquement pour parcourir les éléments à l’envers.

Inverser une liste ou une chaîne avec le découpage en tranches

Un découpage avec un pas de -1, écrit sequence[::-1], produit les éléments dans l’ordre inverse. Pour une liste ou une chaîne de caractères, il crée une nouvelle séquence et laisse l’originale intacte. Cette syntaxe est concise lorsque vous avez besoin de la valeur inversée elle-même, par exemple pour l’affecter à une autre variable ou la transmettre à une fonction.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

word = "Python"
backward = word[::-1]
print(backward)

Le découpage en tranches crée une copie et utilise donc une quantité de mémoire proportionnelle à la longueur de la séquence. Si vous voulez seulement parcourir les éléments et n’avez pas besoin d’une valeur inversée distincte, reversed(sequence) évite cette copie. La même syntaxe fonctionne avec les listes, par exemple items[::-1].

Utiliser un compteur lorsque la boucle nécessite une logique personnalisée

Une boucle while est utile lorsque chaque étape dépend du travail effectué à l’itération précédente ou que la mise à jour est plus complexe qu’une simple soustraction de un. Initialisez le compteur à la première valeur à traiter, gardez une condition qui inclut cette valeur lorsqu’il s’agit de zéro, et mettez le compteur à jour exactement une fois par itération :

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

number = 4
while number >= 0:
    print(number)
    number -= 1
4
3
2
1
0

La condition number >= 0 inclut zéro. Avec number > 0, la boucle s’arrêterait avant de le traiter. Pour un simple compte à rebours fixe, range() est plus court et réduit le risque d’erreur lors des mises à jour ; choisissez un compteur lorsque la logique personnalisée de la boucle justifie cette mise à jour explicite.

Choisir la bonne méthode pour parcourir à l’envers

Utilisez un range() à pas négatif pour obtenir une suite de nombres ou d’indices décroissants. Utilisez reversed() pour parcourir une séquence existante sans la modifier et sans en créer de copie. Utilisez [::-1] si vous avez besoin d’une liste ou d’une chaîne inversée comme nouvelle valeur, en gardant à l’esprit que cette opération alloue cette valeur. Choisissez un compteur dans une boucle while lorsque l’étape suivante ou la condition d’arrêt dépend d’une logique personnalisée. Dans chaque cas, déterminez si la borne finale doit être incluse avant d’écrire la borne d’arrêt de la plage ou la condition de la boucle : c’est la cause la plus fréquente des erreurs de décalage d’une unité.