579 votes

Une fonction Transpose/Unzip en Python (inverse du zip)

J’ai une liste de tuples 2-point, et je voudrais convertir en 2 listes où la première contient le premier élément de chaque tuple et la deuxième liste détient le deuxième élément.

Par exemple :

Y a-t-il une fonction intégrée qui fait cela ?

882voto

Patrick Points 20392

``est son propre inverse ! Si vous utilisez le special * opérateur.

La façon dont cela fonctionne est en appelant `` avec les arguments :

... sauf les arguments sont passés à `` directement (après être converti à un tuple), donc il n’y a aucun besoin de s’inquiéter du nombre d’arguments devient trop grand.

30voto

Anders Eurenius Points 2976

Vous pouvez également faire de

result = ([ a for a,b in original ], [ b for a,b in original ])

Il devrait échelle de mieux. Surtout si Python fait bien sur pas d'allonger la liste des compréhensions sauf si nécessaire.

(En passant, il fait une 2-tuple (paire) de listes, plutôt qu'une liste de tuples, comme zip .)

Si les générateurs au lieu de listes réelles sont ok, ce serait de faire:

result = (( a for a,b in original ), ( b for a,b in original ))

Les générateurs de ne pas grignoter dans la liste jusqu'à ce que vous demandez pour chaque élément, mais d'un autre côté, ils ne conserver les références à la liste d'origine.

22voto

palindrome Points 1315

J’aime utiliser `` (qui est le morceau de code que vous recherchez) dans mes programmes aussi alors :

J’ai trouver `` plus lisible.

21voto

Chris Points 371

Si vous avez des listes qui ne sont pas la même longueur, vous ne pouvez pas utiliser zip selon les Patricks réponse. Cela fonctionne :

Mais avec des longueurs différentes listes, zip tronque chaque élément à la longueur de la liste plus courte :

Vous pouvez utiliser la carte sans fonction pour remplir vides résultats avec aucun :

Cependant, zip() est légèrement plus rapide.

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