webentwicklung-frage-antwort-db.com.de

Auspacken einer Liste / Tupel von Paaren in zwei Listen / Tupel

Mögliches Duplikat:
Eine Transponierungs-/Entpackungsfunktion in Python

Ich habe eine Liste, die so aussieht:

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

Ich möchte die Liste in 2 Listen aufteilen.

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

Ich kann es zum Beispiel machen mit:

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

Aber ich möchte wissen, ob es eine elegantere Lösung gibt.

146
Breixo
>>> 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: Beachten Sie, dass Zip(*iterable) eine eigene Umkehrung ist:

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

Beim Auspacken in zwei Listen wird dies zu:

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

Ergänzung vorgeschlagen von rocksportrocker.

282
agf
list1= ( x[0] for x in source_list )
list2= ( x[1] for x in source_list )
24
S.Lott