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)]
.