2008年9月25日木曜日

Python の zip と map の違い

Python で map 関数の第 2 引数を操作の対象ではなく手段として使う」 の余談で見た map 関数の特殊な使い方。第 1 引数を None とした場合の zip 関数との違いを確認しておく。

例えば、

print zip([1,2,3], [1,2,3,4,5])
print map(None, [1,2,3], [1,2,3,4,5])

結果は、

[(1, 1), (2, 2), (3, 3)]
[(1, 1), (2, 2), (3, 3), (None, 4), (None, 5)]

つまり、

  • 短い方に合わせる zip
  • 長い方に合わせる map

 

zip とは

ところで、何で zip という名前なんだろう (?_?)

Yahoo!辞書 – zip によると、

1 …をチャック[ジッパー]で締める[開ける

二つのリストをチャックで締め合わせるということか?

 

zip を元に戻す

zip したものを元に戻すにはどうしたらいいのだろう? Haskell には unzip 関数があったけれど、Python には見あたらない。 (+_+) 自分でやるしかないかぁ。

例えば、

z = zip([1,2,3], [1,2,3,4,5])
print [a for a,b in z],[b for a,b in z]

それとも、

a,b = [], []
for x,y in z:
    a.append(x); b.append(y)
print a,b

ということは、これでもいけるか~

a,b = [], []
[(a.append(x),b.append(y)) for x,y in z]
print a,b

 

for とリスト内包表記の対応をちゃんとイメージで覚えておこっと。

080925-011