【Python入門】zip()を使った複数のシーケンスの反復処理(for文応用),Python3

zip()をfor文の中で使うシーンはよくあるので、
zip()は必ず理解しておくべき関数だと思います。

たとえば、2017年の野球の結果を使ってみます。

>>> central = ['広島','阪神','DeNA','巨人','中日','ヤクルト']
>>> pacific = ['ソフトバンク','西武','楽天','オリックス','日本ハム','ロッテ']
>>> for c, p in zip(central, pacific):
...     print(c, p)
... 
広島 ソフトバンク
阪神 西武
DeNA 楽天
巨人 オリックス
中日 日本ハム
ヤクルト ロッテ

centralというリストの0番目と、pacificというリストの0番目がセットとなり、あとは同様にセットとなっていくという関数がzip()です。

タプルでも同じようにできます。

>>> central = '広島','阪神','DeNA','巨人','中日','ヤクルト'
>>> pacific = 'ソフトバンク','西武','楽天','オリックス','日本ハム','ロッテ'
>>> for c, p in zip(central, pacific):
...     print(c, p)
... 
広島 ソフトバンク
阪神 西武
DeNA 楽天
巨人 オリックス
中日 日本ハム
ヤクルト ロッテ

zip()を使って、タプルのペアをつくることができます。

>>> list( zip(central, pacific) )
[('広島', 'ソフトバンク'), ('阪神', '西武'), ('DeNA', '楽天'), ('巨人', 'オリックス'), ('中日', '日本ハム'), ('ヤクルト', 'ロッテ')]

dict()の中にzip()を入れると、辞書型にできる。

>>> person = '赤ちゃん', '子ども', '大人'
>>> drink = 'ミルク', 'ジュース', 'お酒'
>>> dict( zip(person, drink) )
{'赤ちゃん': 'ミルク', '子ども': 'ジュース', '大人': 'お酒'}

>>> what_to_drink = dict( zip(person, drink) )
>>> what_to_drink['子ども']
'ジュース'

ベクトルの計算にもzip()が出てきます。
たとえば、2つのベクトル[1, 2]と[2, 1]の和は[1 + 2, 2 + 1]で[3, 3]となります。

>>> def vector_add(v, w):
...     """対応する要素の和"""
...     return [v_i + w_i for v_i, w_i in zip(v, w)]
... 
>>> vector_add([1, 2], [2, 1])
[3, 3]