我有一个元组列表,我想将这个列表解压缩到两个独立的列表中。我正在寻找Python中的一些标准化操作。
>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ]
我正在寻找一种简洁和pythonic的方法来实现这一目标。
基本上,我正在寻找zip()
函数的逆运算。
答案 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()
function,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
列出的元组或使用列表推导来生成列表列表:
{{1}}
答案 1 :(得分:79)
如果您需要列表清单:
>>> [list(t) for t in zip(*l)]
[[1, 3, 8], [2, 4, 9]]
如果元组列表没问题:
>>> zip(*l)
[(1, 3, 8), (2, 4, 9)]