Python入門 zip関数(動画あり)

zip関数

Pythonのzip関数の使い方を動画を使って説明しています。
Pythonのzip関数は、forループで複数のリストの要素を取得してタプルの形式でまとめて変数に代入してくれます。これはつまり、タプルのアンパッキングを行っているものです。
もし、zip関数を使用時に、いくつかのリストが持つ要素数が異なる場合は、要素数が多いリストの余分な要素が無視されます。

2つのリストでzip関数を使った例

x = [1, 2, 3]
y = [4, 5, 6]
for num in zip(x, y):
  print(num)

結果
(1, 4)
(2, 5)
(3, 6)

タプルの場合もリストと同じ結果になります。

x = (1, 2, 3)
y = (4, 5, 6)
for num in zip(x, y):
  print(num)

結果
(1, 4)
(2, 5)
(3, 6)

for in文の中の変数をイテラブルなオブジェクトの数に合わせると、それぞれの変数に値が入ります。

for in文の変数を複数にした例

x = [1, 2, 3]
y = [4, 5, 6]
for num_x, num_y in zip(x, y):
  print('num_x:', num_x, 'num_y:', num_y)
  print('------------------')

結果
num_x: 1 num_y: 4
——————
num_x: 2 num_y: 5
——————
num_x: 3 num_y: 6
——————

辞書作成

Pythonのzip関数を使ってタプルから辞書を作成する例

english = ('dog', 'cat', 'bird', 'monkey')
japanese = ('犬', '猫', '鳥', '猿')
dict(zip(english,japanese))

結果
{‘bird’: ‘鳥’, ‘cat’: ‘猫’, ‘dog’: ‘犬’, ‘monkey’: ‘猿’}

zip関数でリスト要素の入れ替えが行えます。

リスト要素の入れ替えの例
この例ではfor in文を使用していません。
下記コードのdataにはzip関数適用後イテレータが返されます。
イテレータの内容を直接確認できませんが、list()でリスト型にキャストすることでその中身を確認しています。

name = ['織田信長', '豊臣秀吉', '徳川家康']
height = [1.78, 1.65, 1.50]
weight = [60, 50, 75]
data = zip(name, height, weight)
list(data)

結果
[(‘織田信長’, 1.78, 60), (‘豊臣秀吉’, 1.65, 50), (‘徳川家康’, 1.5, 75)]

zip関数を使った後にできた値を変数に代入しておいて、その変数をzip関数の引数の先頭に * をつけると、zip したリストを元に戻せます。

zip関数を適用した値を元に戻す例

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
z = list(zipped)
print(z)
list(zip(*z))

結果
[(1, 4), (2, 5), (3, 6)]
[(1, 2, 3), (4, 5, 6)]

次のコードはPythonチュートリアルPythonチュートリアルにあるコードです。
これの意味は動画で説明していますので参考にしてください。

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
print(list(zipped))
x2, y2 = zip(*zip(x, y))
x == list(x2) and y == list(y2)

参考になった書籍

プログラミングを少しでも経験がありPython の文法を学習する場合は、「入門 Python 3」が良いと思います。長く使えます。

「退屈なことはPython にやらせよう」はオブジェクト指向の解説がないです。代わりにPythonを使った便利な実例が初心者には嬉しい内容です。正規表現から、簡単なスクレイピング 、画像操作などあります。ただし、中級者以上には少し物足りないかもしれません。

Pythonサンプルのダウンロード

ここでダウンロードする「zip.ipynb」ファイルは、このPython動画で使用したものです。

zip.ipynb

Python入門一覧