La méthode range permet de créer rapidement des listes d'entiers :
>>> range(5)
>>> range(3,8)
>>> range(3,12,2)
>>> range(11,7,-1)
Notons pour finir que la méthode range ne permet de manipuler que des entiers.
La boucle for (pour) peut parcourir tout "itérable" : chaînes de caractères, listes d'entiers ou d'autres objets, tuples... L'itérable de base pour for une liste d'entiers, donc écrite avec range.
Ainsi, lorsque l'on écrit :
>>> for i in range(5) : ... print i, ...
...on obtient 0 1 2 3 4.
Il faut comprendre ce qui précède ainsi : "Pour i parcourant la liste d'entier range(5)=[0,1,2,3,4], afficher i."
Ainsi, pour calculer la somme des 100 premiers entiers, on peut procéder ainsi :
>>> S = 0 >>> for k in range(101): ... S = S + k ... >>> print S 5050
Notons, pour finir, qu'à la fin de la boucle, la variable de boucle existe toujours, et posséde sa dernière valeur prise :
>>> for k in range(5): ... print k, ... 0 1 2 3 4 >>> k 4
Une chaîne de caractères, comme mot, peut aussi être itérée : il y a un premier caractère, puis un second, etc. On peut donc utiliser un for ici, quand on souhaite demander : pour un caractère dans la chaîne de caractères suivante...
>>> for lettre in "mot" : ... print lettre, ... mot
Ainsi, on l'a dit, une boucle for peut parcourir une liste, un tuple ou une chaîne de caractères.
A choisir, il vaut mieux utiliser for avec un itérable non modifiable (une chaîne de caractères, un tuple plutôt qu'une liste). En effet, for évalue dynamiquement les éléments à chaque cycle, et des effets de bords imprévisibles peuvent survenir si la liste itérée a été modifiée.
Comparer, par exemple, les deux boucles suivantes :
>>> liste = [1, 2, 3] >>> for k in liste: ... print k ... liste = [] ... 1 2 3 >>> liste = [1, 2, 3] >>> for k in liste: ... print liste[k-1] ... liste = [] ... 1 Traceback (most recent call last): File "<stdin>", line 2, in <module> IndexError: list index out of range >>>
Pour faciliter l'écritures de boucles, Python utilise trois mots-clés :