Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
s'arrête lorsque le plus court de foo
ou bar
s'arrête.
En Python 3 , zip
retourne un itérateur de tuples, comme itertools.izip
en Python2. Pour obtenir une liste de tuples, utilisez list(zip(foo, bar))
. Et pour compresser jusqu'à épuisement des deux itérateurs, vous utiliserez
itertools.zip_longest .
Python 2
En Python 2 , zip
retourne une liste de tuples. C'est bien quand foo
et ce bar
n'est pas massif. S'ils sont tous les deux massifs, la formation zip(foo,bar)
est une variable temporaire inutilement massive et doit être remplacée par itertools.izip
ou
itertools.izip_longest
, qui renvoie un itérateur au lieu d'une liste.
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izip
s'arrête lorsque l'un foo
ou l' autre bar
est épuisé.
izip_longest
s'arrête lorsque les deux foo
et bar
sont épuisés. Lorsque le ou les itérateurs les plus courts sont épuisés, izip_longest
donne un tuple avec None
la position correspondant à cet itérateur. Vous pouvez également définir un autre en fillvalue
plus None
si vous le souhaitez. Voir ici pour l' histoire complète .
Notez également que zip
et ses zip
frères semblables peuvent accepter un nombre arbitraire d'itérables comme arguments. Par exemple,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
impressions
1 red manchego
2 blue stilton
3 green brie
izip
celle (même si laizip
/zip
semble beaucoup plus propre)?zip
etzip
similairesitertools
acceptent n'importe quel nombre d'itérables et pas seulement 2? Cette question est maintenant canonique et votre réponse est la seule qui mérite d'être mise à jour.i
? Puis-je envelopper ce zip en énumérer?for i, (f, b) in enumerate(zip(foo, bar))
.Vous voulez la
zip
fonction.la source
itertools.izip
si vous avez un grand nombre d'éléments.Vous devez utiliser la fonction ' zip '. Voici un exemple à quoi peut ressembler votre propre fonction zip
la source
zip(seq1, seq2)
?Vous pouvez regrouper les nièmes éléments dans un tuple ou une liste en utilisant la compréhension, puis les distribuer avec une fonction de générateur.
la source
Si quelqu'un cherche quelque chose comme ça, je l'ai trouvé très simple et facile:
Les listes seront itérées avec leur contenu complet, contrairement à zip () qui n'itère que jusqu'à la longueur minimale du contenu.
la source
Voici comment procéder avec la compréhension de la liste:
impressions:
la source