204 votes

Déballage d'une liste / tuple de paires en deux listes / tuples

Duplicata possible : Une fonction de transposition/décompression en Python

J'ai une liste qui ressemble à ceci :

 list = (('1','a'),('2','b'),('3','c'),('4','d'))

Je veux séparer la liste en 2 listes.

 list1 = ('1','2','3','4')
list2 = ('a','b','c','d')

Je peux le faire par exemple avec :

 list1 = []
list2 = []
for i in list:
   list1.append(i[0])
   list2.append(i[1])

Mais je veux savoir s'il existe une solution plus élégante.

398voto

agf Points 45052
>>> source_list = ('1','a'),('2','b'),('3','c'),('4','d')
>>> list1, list2 = zip(*source_list)
>>> list1
('1', '2', '3', '4')
>>> list2
('a', 'b', 'c', 'd')

Edit : Notez que zip(*iterable) est son propre inverse :

 >>> list(source_list) == zip(*zip(*source_list))
True

Lors du déballage en deux listes, cela devient :

 >>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True

Ajout suggéré par rocksportrocker.

27voto

S.Lott Points 207588
list1 = (x[0] for x in source_list)
list2 = (x[1] for x in source_list)

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