2010/02/08

pythonでunzip()関数を実現するためには

pythonには(当たり前だけど)リストをまとめるためのzip()関数が存在する。

>>> A = [1,2,3]
>>> B = [4,5,6]
>>> zip(A, B)
[(1, 4), (2, 5), (3, 6)]
これだけじゃちょっとありがたみが分かんないけど、配列っていうのは『オブジェクトjの状態』などを格納してある場合が結構あるので、jに関してループを回したいとかのような場合に便利だったりする。

for (state1, state2) in zip(A, B):
  # do something
で、これはいいんだけど、なぜかpythonにはzip関数でまとめられた配列を展開する"unzip()"関数が存在しない。なんでだろーとか思って調べたら、どーやらこれでできるらしい。

>>> C = zip(A, B)
>>> zip(*C)
[(1, 2, 3), (4, 5, 6)]
なるほどー…pythonらしい。

最初『…ですよねー!』ってなったけど、こーゆう解決案をぱっと思いつくのが賢い人間なんだろーなーとか思った。…うん、そりゃそうだ。