2010-11-06 7 views
60

Je veux zip la liste suivante des listes:Comment zip listes dans une liste

>>> zip([[1,2], [3,4], [5,6]]) 
[[1,3,5], [2,4,6]] 

Cela pourrait être réalisé avec la zip mise en œuvre uniquement actuelle si la liste est divisée en composants individuels:

>>> zip([1,2], [3,4], [5,6]) 
    (1, 3, 5), (2, 4, 6)] 

Impossible de déterminer comment diviser la liste et transmettre les éléments individuels à zip. Une solution fonctionnelle est préférée.

Répondre

94

Essayez ceci:

>>> zip(*[[1,2], [3,4], [5,6]]) 
[(1, 3, 5), (2, 4, 6)] 

Voir Unpacking Argument Lists:

La situation inverse se produit lorsque les arguments sont déjà dans une liste ou tuple mais doivent être déballée un appel de fonction nécessitant des arguments de position séparés . Par exemple, la fonction intégrée range() attend des arguments start et stop séparés. Si elles ne sont pas disponibles séparément, écrire l'appel de fonction avec le * -operator de déballer les arguments sur une liste ou tuple:

>>> range(3, 6)    # normal call with separate arguments 
[3, 4, 5] 
>>> args = [3, 6] 
>>> range(*args)   # call with arguments unpacked from a list 
[3, 4, 5] 
+3

Voir http://docs.python.org/tutorial/controlflow. html # unpacking-argument-lists pour savoir comment cela fonctionne. – ameer

+0

@ameer: ​​Merci, ajouté. –

+1

Ceci est l'une de mes caractéristiques préférées python sous-évalué. Pas souvent utile, mais tellement pratique quand vous en avez besoin! – fmark

Questions connexes