Duplicate possible:
ne fonction Transpose/Unzip 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.
>>> 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
Lorsque vous décompressez en deux listes, cela devient:
>>> list1, list2 = Zip(*source_list)
>>> list(source_list) == Zip(list1, list2)
True
Ajout suggéré par rocksportrocker.
list1= ( x[0] for x in source_list )
list2= ( x[1] for x in source_list )