zip関数

いまさらだけどPython にも zip関数があるのを知った。というか見逃していた。

>>> a = range(5)
>>> a
[0, 1, 2, 3, 4]
>>> b = ['a', 'b', 'c', 'd', 'e']
>>> zip(a, b)
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]

今まで↓こう書いてたよ。ばかみたい。zipのほうがよっぽどすっきりしている。

>>> map(lambda x, y: (x, y), a, b)
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]

とはいえ、違いもある。
zipは長さを短いほうにあわせる。

>>> c = ['foo', 'bar', 'baz']
>>> zip(a, c)
[(0, 'foo'), (1, 'bar'), (2, 'baz')]

mapだと長いほうにあわせて、足りない部分にはNoneが入る。

>>> map(lambda x, y: (x, y), a, c)
[(0, 'foo'), (1, 'bar'), (2, 'baz'), (3, None), (4, None)]