282 votes

Python: une fonction semblable à un zip qui couvre le plus longtemps possible?

Existe-t-il une fonction intégrée qui fonctionne comme zip() mais qui compilera les résultats pour que la longueur de la liste résultante soit la longueur de la plus longue entrée plutôt que la plus courte ?

 >>> a=['a1']
>>> b=['b1','b2','b3']
>>> c=['c1','c2']

>>> zip(a,b,c)
[('a1', 'b1', 'c1')]

>>> What command goes here?
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
 

399voto

Nadia Alramli Points 40381

Vous pouvez utiliser itertools.izip_longest (python 2.6+) ou map avec None . C'est une fonctionnalité peu connue de la carte (mais map changé dans python 3.x, donc cela ne fonctionne que dans python 2.x).

 >>> map(None, a, b, c)
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
 

92voto

SilentGhost Points 79627

Pour une utilisation Python 2,6x itertools du module izip_longest .

Pour Python 3, utilisez zip_longest place (pas de majuscule i ).

 >>> list(itertools.izip_longest(a, b, c))
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X