我有一个元组列表l =[(1,2),(3,4),(8,9)]。我怎样才能以简洁的python方式将这个列表解压缩为两个独立的列表,以获得[[1,3,8],[2,4,9]]?
换句话说,我如何得到zip所做的倒数?
我有一个元组列表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)]