Python|zip関数の使い方


zip関数は複数のリスト、タプルやその他のシーケンスから、タプルのリストを1つ組み上げます。

たとえば、以下のように使います。

list1 = ['foo', 'bar', 'baz', 'boo']
list2 = ['google', 'facebook', 'amazon', 'apple']
zipped = zip(list1, list2)
# zipped
# [('foo', 'google'), ('bar', 'facebook'), ('baz', 'amazon')]

生成される要素は最も短いシーケンスによって決まります。

list3 = [False, True] 
#list(zip(list1, list2, list3))
#[('foo', 'google', False), ('bar', 'facebook', True)]

複数のシーケンスを同時に逐次処理するときに使われます。

for文の中でzip関数が使われるサンプルはよく見るのではないでしょうか。

>>> for i, (a, b) in enumerate(zip(list1, list2)):
        print('{0}: {1}, {2}'.format(i, a, b))

# 0: foo, google
# 1: bar, facebook
# 2: baz, amazon
# 3: boo, apple

タプルをzipで分解する

Pythonの引数にリストやタプルを指定して、その前にアスタリスクを1つ付けると、リストやタプルが分解されてそれぞれ1つの引数として使われます。

player = [('Suzuki', 'Ichiro'), ('Nomo', 'Hideo'), ('Matsui', 'Hideki')]
last_names, first_names = zip(*player)
# last_names
# ('Suzuki', 'Nomo', 'Matsui')
# first_names
# ('Ichiro', 'Hideo', 'Hideki')