Un outil pour produire des nombres
range() fait exactement une chose : il produit une séquence d'entiers. C'est le partenaire de choix des boucles for quand tu as besoin d'itérer un nombre spécifique de fois ou de parcourir un intervalle numérique.
La forme la plus simple prend un seul argument — la valeur stop :
Sortie :
0
1
2
3
4
Deux détails qui attrapent les débutants :
- Le comptage commence à 0.
range(5)te donne cinq nombres, en partant de 0. - La valeur stop est exclusive.
range(5)s'arrête avant 5 — il n'inclut pas 5 lui-même.
Ces règles sont cohérentes à travers les opérations de découpage, d'indexation et de range en Python. Une fois que tu as intériorisé « stop est exclusif », ça arrête de te faire trébucher.
Trois formes
range() accepte un, deux ou trois arguments :
Le pas (step) est la taille de chaque saut. range(0, 20, 4) produit tous les quatre nombres. Garde ça en tête la prochaine fois que tu as besoin de « un élément sur deux » ou « un échantillon sur dix ».
Compter à rebours
Le pas peut être négatif, ce qui te permet de compter à l'envers :
Encore une fois, le stop est exclusif — range(10, 0, -1) s'arrête avant 0, pas à 0. Pour inclure 0, mets le stop à -1 :
range est paresseux
En Python 3, range() ne construit pas une liste de nombres en mémoire. Il renvoie un objet range léger qui produit les nombres un par un, à la demande. C'est pour ça que tu peux écrire :
Un « range » d'un milliard de nombres prend essentiellement zéro mémoire. Les nombres sont générés à mesure que la boucle les demande.
Si tu as vraiment besoin d'une liste des nombres — parce que tu veux la modifier, la trier ou l'indexer au-delà des bases — convertis explicitement :
La plupart du temps, tu n'as pas besoin de la liste. for i in range(...) fonctionne directement.
Motifs courants
Une poignée de recettes que tu utiliseras constamment :
Faire quelque chose n fois.
Le _ est une convention qui veut dire « je me fiche de cette valeur » — Python ne l'impose pas, mais n'importe quel lecteur reconnaîtra l'intention.
Indexer une séquence.
Préfère enumerate() à range(len(...)), mais quand tu as spécifiquement besoin juste de l'index :
Quand même, la plupart du temps enumerate(items) est plus propre.
Itérer un élément sur deux.
Ça affiche a, c, e. Pour du simple découpage, cependant, la syntaxe de découpage est encore plus directe : items[::2].
Générer une liste numérique rapide.
C'est une compréhension de liste — couverte plus tard — mais range est ce qui fournit les nombres.
Ce que range() n'est pas
Deux arêtes vives à connaître :
rangene produit que des entiers. Si tu as besoin de pas à virgule flottante (comme 0.0 à 1.0 par incréments de 0.1), utilisenumpy.arangeou une boucle avec ton propre compteur.rangene fonctionne pas avec des itérables arbitraires. C'est spécifiquement pour les entiers. Si tu essaies de « ranger » sur une liste, tu cherches probablementenumerateou juste la liste elle-même.
En mettre ensemble
Un petit exemple utilisant plusieurs variations d'un coup :
Deux boucles range imbriquées, produisant une grille. Remarque que les deux boucles commencent à 1 — range(1, 6) — parce qu'on veut des étiquettes de 1 à 5.
Vers les collections
Tu as maintenant vu les conditions, les deux types de boucles et range. C'est assez de contrôle de flux pour piloter n'importe quelle collection. Prochain chapitre : les collections elles-mêmes — listes, tuples, ensembles et dictionnaires.
Questions fréquentes
Que fait range() en Python ?
range() produit une séquence d'entiers. range(n) donne de 0 à n-1. range(start, stop) donne les entiers de start jusqu'à mais sans inclure stop. range(start, stop, step) te laisse choisir la taille du pas, y compris des pas négatifs pour compter à rebours.
range() crée-t-il une liste ?
Non. En Python 3, range() renvoie un objet range léger qui génère les nombres à la demande. C'est pourquoi range(10**9) est instantané — il n'alloue pas un milliard d'entiers. Enveloppe-le dans list(...) si tu as vraiment besoin d'une liste.
Comment compter à rebours avec range() en Python ?
Utilise un pas négatif : range(10, 0, -1) compte 10, 9, 8, ..., 1. Rappelle-toi que la valeur stop est toujours exclusive, donc pour inclure 0 il te faudrait range(10, -1, -1).