Comment compresser des listes dans une liste


92

Je veux compresser la liste de listes suivante:

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

Cela pourrait être réalisé avec l' zipimplémentation actuelle uniquement si la liste est divisée en composants individuels:

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

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

Réponses:


146

Essaye ça:

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

Voir Déballage des listes d'arguments :

La situation inverse se produit lorsque les arguments sont déjà dans une liste ou un tuple mais doivent être décompressés pour un appel de fonction nécessitant des arguments positionnels séparés. Par exemple, la fonction intégrée range () attend des arguments de démarrage et d'arrêt séparés. S'ils ne sont pas disponibles séparément, écrivez l'appel de fonction avec l'opérateur * pour décompresser les arguments d'une liste ou d'un 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]

4
Voir docs.python.org/tutorial/… pour savoir comment cela fonctionne.
ameer

2
J'aimerais voir une alternative au cas où vous auriez une liste avec un million d'entrées. Ce n'est peut-être pas une bonne idée de décompresser un million d'éléments dans un appel de fonction ...
Blixt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.