Comment itérer sur plusieurs séquences simultanément en Python

Vous voulez itérer sur les éléments contenus dans plus d’une séquence à la fois. Pour itérer sur plusieurs séquences simultanément, utilisez la fonction zip(). Par exemple:

>>> xpts = [1, 5, 4, 12, 10, 17]
>>> ypts = [101, 78, 137, 15, 62, 199]
>>> for x, y in zip(xpts, ypts):
...     print(x,y)
...
1 101
5 78
4 137
12 15
10 62
17 199
>>>

zip(a, b) fonctionne en créant un itérateur qui produit des tuples (x, y) où x est pris de a et y est pris de b. L’itération s’arrête quand l’une des séquences d’entrée est épuisée. Ainsi, la longueur de l’itération est la même que la longueur de l’entrée la plus courte. Par exemple:

>>> a = [11, 12, 13]
>>> b = ['w', 'x', 'y', 'z']
>>> for i in zip(a,b):
...     print(i)
...
(11, 'w')
(12, 'x')
(13, 'y')
>>>

Si ce comportement n’est pas souhaité, utilisez itertools.zip_longest() à la place. Par exemple:

zip() est couramment utilisé lorsque vous avez besoin de coupler des données. Par exemple, supposons que vous ayez une liste d’en-têtes de colonne et de valeurs de colonne comme ceci:

>>> from itertools import zip_longest
>>> for i in zip_longest(a,b):
...     print(i)
...
(11, 'w')
(12, 'x')
(13, 'y')
(None, 'z')
>>> for i in zip_longest(a, b, fillvalue=0):
...     print(i)
...
(11, 'w')
(12, 'x')
(13, 'y')
(0, 'z')
>>>

En utilisant zip(), vous pouvez coupler les valeurs ensemble pour faire un dictionnaire comme celui-ci:

champs= ['nom', 'actions', 'prix']
valeurs = ['AE', 10, 40.1]

Alternativement, si vous essayez de produire une sortie, vous pouvez écrire du code comme ceci:

s = dict(zip(vhamps,valeurs))

C’est moins courant, mais zip() peut y être passé plus de deux séquences en entrée. Dans ce cas, les tuples résultants contiennent le même nombre d’éléments que le nombre de séquences d’entrée. Par exemple:

for nom, val in zip(champs, valeurs):
    print(nom, '=', val)

Enfin, il est important de souligner que zip() crée un itérateur en conséquence. Si vous avez besoin des valeurs appariées stockées dans une liste, utilisez la fonction list(). Par exemple:

>>> a = [11, 12, 13]
>>> b = [210, 211, 212]
>>> c = ['x','y','z']
>>> for i in zip(a, b, c):
...     print(i)
...
(11, 210, 'x')
(12, 211, 'y')
(13, 212, 'z')
>>>

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here