Python / range() / Créer des entiers consécutifs ou régulièrement espacés
En Python, range() crée une séquence immuable représentant des entiers régulièrement espacés. Elle inclut le départ mais exclut la borne stop ; le signe de step choisit le sens. Elle diffère d’une liste de toutes les valeurs et d’un générateur consommé pendant l’itération.
Règles de start, stop et step
La référence de range décrit range(stop), range(start, stop) et range(start, stop, step). Par défaut, start vaut zéro et step un. Les arguments doivent être entiers ou prendre en charge le protocole d’index entier ; flottants ordinaires et chaînes numériques ne sont pas automatiquement convertis.
Utilisez Python 3. Enregistrez chaque exemple complet en UTF-8 dans range_example.py et lancez python range_example.py, ou python3 selon votre installation. Remplacez le contenu pour des essais indépendants. Pour les petits intervalles, list() montre toutes les valeurs.
print(list(range(4)))
print(list(range(1, 6)))
print(list(range(1, 10, 2)))
Résultat attendu :
[0, 1, 2, 3]
[1, 2, 3, 4, 5]
[1, 3, 5, 7, 9]
range(4) va de zéro à trois et range(1, 6) de un à cinq. Pour inclure cinq avec un pas croissant de un, fixez stop à six. Avec un pas de deux, la dernière valeur n’est pas forcément stop moins un : espacement et borne doivent être satisfaits.
Pas négatifs et intervalles vides
Un pas positif inclut les valeurs inférieures à stop ; un pas négatif, celles supérieures à stop. Pour descendre, choisissez un pas négatif. Si le sens ne correspond pas aux bornes, le résultat est vide, sans erreur.
print(list(range(10, -5, -3)))
print(list(range(5, 0, -1)))
print(list(range(5, 0)))
print(list(range(0, 5, -1)))
print(list(range(3, 3)))
[10, 7, 4, 1, -2]
[5, 4, 3, 2, 1]
[]
[]
[]
range(10, -5, -3) donne 10, 7, 4, 1, -2. La suivante, -5, est stop et reste exclue. Utilisez range(5, 0, -1) pour aller de cinq à un. Un départ égal à stop produit aussi un intervalle vide, dont le corps de boucle n’est jamais exécuté.
Indices et itération sans liste
Afficher un range montre sa représentation, pas chaque élément. Les valeurs sont calculées depuis bornes et pas ; longueur, indices, tranches et appartenance sont disponibles. Son immuabilité empêche de remplacer un élément par affectation à un indice.
numbers = range(2, 10, 2)
print(numbers)
print(len(numbers))
print(numbers[0], numbers[-1])
print(list(numbers[1:3]))
print(6 in numbers, 7 in numbers)
print(list(numbers))
print(list(numbers))
range(2, 10, 2)
4
2 8
[4, 6]
True False
[2, 4, 6, 8]
[2, 4, 6, 8]
Deux conversions du même range en liste donnent les mêmes éléments. Le range lui-même n’est pas un générateur épuisable. Un itérateur distinct créé avec iter(numbers) est consommé : distinguez-le de la séquence. Une tranche renvoie aussi un range, ici converti en liste pour inspection.
Pas zéro, flottants et chaînes : les erreurs
Le pas zéro ne définit aucune progression et provoque ValueError. 3.0 reste un flottant malgré sa valeur entière ; "3" est une chaîne. Les deux provoquent TypeError.
for arguments in ((1, 5, 0), (3.0,), ("3",)):
try:
print(range(*arguments))
except (ValueError, TypeError) as error:
print(type(error).__name__)
ValueError
TypeError
TypeError
Si du texte entier est une entrée autorisée, validez-le et convertissez-le séparément avec int(). Tronquer aveuglément des flottants peut créer un intervalle inattendu : définissez d’abord les règles d’entrée. Ici, la gestion des exceptions compare des entrées invalides, sans traiter silencieusement un échec comme une réussite.
Choisir range ou enumerate pour la boucle
Une boucle range convient à un nombre fixe de répétitions ou à des étapes entières. Parcourez directement une liste si seuls ses éléments sont nécessaires. Pour ajouter un numéro, enumerate() évite le calcul manuel d’indices.
for number in range(1, 4):
print("Step", number)
names = ["Ada", "Bo"]
for number, name in enumerate(names, start=1):
print(number, name)
Step 1
Step 2
Step 3
1 Ada
2 Bo
La première boucle comporte trois étapes, de un à trois. Dans la seconde, start=1 change la numérotation sans sauter le premier élément. range(len(items)) reste utile si de vrais indices ou des calculs de position sont nécessaires.
Grands intervalles et ressources réelles
Un range représente de grandes bornes sans stocker toute la liste, mais ne supprime pas le temps de parcours de chaque valeur. Dans CPython, la limite de représentation de longueur de len() peut produire OverflowError alors que le range a pu être créé.
import sys
numbers = range(sys.maxsize + 1)
print(numbers[0])
print(numbers[-1] == sys.maxsize)
try:
print(len(numbers))
except OverflowError:
print("OverflowError")
0
True
OverflowError
L’exemple vérifie seulement extrémités et erreur de longueur, sans parcourir la séquence. sys.maxsize varie selon l’environnement. Évitez de matérialiser un immense range avec list() ; parcourez les parties nécessaires ou traitez progressivement les résultats.




