273

重複の可能性:
Python の転置/解凍関数

タプルのリストがあり、このリストを 2 つの独立したリストに解凍したいと考えています。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()関数は、最初の値、次に2番目の値など、すべての入力からの要素をペアにします。を使用すると、関数に個別の引数としてすべてのタプル*lを適用するため、最初に、次に、とにペアになります。それらはたまたま列、またはの転置とうまく対応しています。lzip()zip()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 に答える