如何将元组列表解压缩到单个列表中?

时间:2012-10-19 12:38:41

标签: python list tuples list-comprehension

  

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

我有一个元组列表,我想将这个列表解压缩到两个独立的列表中。我正在寻找Python中的一些标准化操作。

>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ] 

我正在寻找一种简洁和pythonic的方法来实现这一目标。

基本上,我正在寻找zip()函数的逆运算。

2 个答案:

答案 0 :(得分:327)

使用zip(*list)

>>> l = [(1,2), (3,4), (8,9)]
>>> list(zip(*l))
[(1, 3, 8), (2, 4, 9)]

zip() function将所有输入中的元素配对,从第一个值开始,然后是第二个,等等。使用*l apply all tuples in l as separate arguments to the zip() functionzip()对首先1 38首先2,然后4 9l。这些恰好与zip()的列或转置很好地对应。

map()产生元组;如果你必须有可变列表对象,只需map(list, zip(*l)) # keep it a generator [list(t) for t in zip(*l)] # consume the zip generator into a list of lists 列出的元组或使用列表推导来生成列表列表:

{{1}}

答案 1 :(得分:79)

如果您需要列表清单:

>>> [list(t) for t in zip(*l)]
[[1, 3, 8], [2, 4, 9]]

如果元组列表没问题:

>>> zip(*l)
[(1, 3, 8), (2, 4, 9)]