将一个由对组成的列表/元组解压缩为两个列表/元组

我有一个这样的列表:

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

我想把这个列表分成两个列表。

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

我可以这样做,例如:

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

但我想知道是否有更优雅的解决方案。

200486 次浏览
list1 = (x[0] for x in source_list)
list2 = (x[1] for x in source_list)
>>> 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')

注意,zip(*iterable)是它自己的逆:

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

当解压缩为两个列表时,这就变成了:

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

由rocksportrocker建议添加。