Parcours de listes
enumerate et range Il est indispensable de comprendre les parcours de séquences avec range, enumerate et zip : Enumerate retourne un générateur qui renvoie des tuples (indice, valeur). Pour s'en convaincre, on peut récupérer l'ensemble de ces tuples avec list() |
l = [1,2,3]°°°° list(enumerate(l)) |
[(0, 1), (1, 2), (2, 3)] |
l = [1,2,3] °° for i,v in enumerate([1,2,3]) : °° print(i,v) |
0 1 1 2 2 3 |
Range est aussi un générateur qui lui renvoie les nombres compris entre a inclus et b exclus avec un pas de n : range(a,b,n) Notez que le pas et la valeur intiale sont optionnelle (1 et 0 par défaut respectivement). |
range(4) == range(0,4,1) Rta:True |
range(1,4) == range(4) Rta:False |
list(range(1,100, 10)) Rta: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91] |
L'utilisation de range pour parcourir les listes peut engendrer des erreurs. |
%%script python --no-raise-error °° l1 = [7,8,9,90] °°°l2 = [4,5,6,90,3992] °°° for i in range(0, len(l2)): °°° print(l1[i], l2[i]) |
7 4 8 5 9 6 90 90 °°°Traceback (most recent call last): File "<stdin>", line 6, in <module> IndexError: list index out of range |
C'est notamment le cas quand on veux parcourir deux listes de taille différente en même temps. Dans ce cas soit on s'arrête au minimum des deux listes : |
l1 = [7,8,9,90]°°° l2 = [4,5,6, 90, 3992] °°°for i in range(min(len(l1), len(l2))): °°° print(l1[i], l2[i]) |
7 4°° 8 5°° 9 6°° 90 90 el resultado es como dos listas |
Soit on utilise la fonction zip : |
l1 = [7,8,9,90] l2 = [4,5,6, 90, 3992] for e1,e2 in zip(l1,l2): print(e1,e2) |
7 4°° 8 5 °°°9 6 °°°90 90 |
list(zip(l1,l2)) |
[(7, 4), (8, 5), (9, 6), (90, 90)] |
|