2次元データの縦と横を入れ替える

この記事は Python Tips Advent Calendar 2012 14日目の記事です。


Python では、2次元配列などのデータに対して縦と横を入れ替える(transpose)が簡単にできます。
zip を使うだけです。

>>> xss = [[1, 2, 3],
...        [4, 5, 6],
...        [7, 8, 9]]
>>> zip(*xss)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

zip の場合、縦と横の長さが違うときは、一番短いデータに合わさることになります。

>>> xss = [[1, 2, 3],
...        [4, 5],
...        [7]]
>>> zip(*xss)
[(1, 4, 7)]

長い方に合わせたい場合、filter, map に指定する関数 で書いたように、map や izip_longest を使うといいです。

>>> xss = [[1, 2, 3],
...        [4, 5],
...        [7]]
>>> map(None, *xss)
[(1, 4, 7), (2, 5, None), (3, None, None)]


.