273

可能重复:
Python 中的转置/解压缩函数

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

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

我正在寻找一种简洁和pythonic的方式来实现这一点。

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

4

2 回答 2

472

使用zip(*list)

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

zip()函数将来自所有输入的元素配对,从第一个值开始,然后是第二个值,等等。通过使用,*l将所有元组l作为单独的参数应用到f zip()​​unction,因此与firstzip()配对,然后与and配对。这些恰好与列.138249l

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
于 2012-10-19T12:40:13.177 回答
87

如果你想要一个列表列表:

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

如果元组列表没问题:

>>> zip(*l)
[(1, 3, 8), (2, 4, 9)]
于 2012-10-19T12:39:59.853 回答