将列表/元组对打包成两个列表/元组

时间:2011-09-26 17:33:50

标签: python list tuples

  

可能重复:
  A Transpose/Unzip Function in Python

我有一个如下所示的列表:

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

我想将列表分成2个列表。

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

我可以这样做:

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

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

2 个答案:

答案 0 :(得分:264)

>>> 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的建议。

答案 1 :(得分:22)

list1= ( x[0] for x in source_list )
list2= ( x[1] for x in source_list )