タプルのリストがありますl = [(1,2), (3,4), (8,9)]
。このリストを簡潔かつ Python で 2 つの独立したリストに解凍して を取得するにはどうすればよいでしょうか[ [1, 3, 8], [2, 4, 9] ]
?
言い換えれば、逆数を取得するにはどうすればいいかzip
そうでしょうか?
ベストアンサー1
使用zip(*list)
:
>>> l = [(1,2), (3,4), (8,9)]
>>> list(zip(*l))
[(1, 3, 8), (2, 4, 9)]
のzip()
関数全ての入力から要素をペアにして、最初の値から始めて、次に2番目の値などを作成します*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