我有一个元组列表l =[(1,2),(3,4),(8,9)]。我怎样才能以简洁的python方式将这个列表解压缩为两个独立的列表,以获得[[1,3,8],[2,4,9]]?

换句话说,我如何得到zip所做的倒数?


当前回答

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

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

如果一个元组列表是OK的:

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

其他回答

列表使用zip (*):

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

zip()函数将来自所有输入的元素配对,从第一个值开始,然后是第二个值,等等。通过使用*l,您将l中的所有元组作为单独的参数应用到zip()函数,因此zip()首先将1与3与8配对,然后将2与4和9配对。它们恰好和列向量很好地对应,或者l的转置。

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

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

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

如果一个元组列表是OK的:

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