【保存版】Python zip関数の基本や使い方|実例付で解説

Python

(最終更新月:2022年12月)

✔このような方へ向けて書かれた記事となります

「Pythonのzip関数について基本が知りたい」

「zip関数って何ができるの?」

「zip関数を使った実際のコードが見てみたい」

✔当記事を通じてお伝えすること

  • zip関数でできること
  • zip関数で気を付けること
  • zip関数の応用:zip_longestやstrict引数

当記事では、Pythonのzip関数について、基本はもちろん、注意点や実例まですべて理解いただけるよう解説していきます。

ぜひ最後までご覧ください。

もしPythonでZIPファイルを圧縮・解凍したいという方は以下の記事をどうぞ。

profile_icon

【Python歴】10年 x 【営業マン歴】11年

HP作成、社内システムの構築、コンサルティング

Pythonベースのフレームワーク 「Django」を使って下記のようなサイトを作っています!

日報アプリ
当ブログで一から開発方法を解説している日報アプリ(デモ版)です
ツールアプリ
当ブログで紹介したPythonアプリのWeb版です。DjangoAPIとReactで開発。随時更新中です。

Pythonのzip関数とは?

Pythonのzip関数について基本をご説明します。

具体的な使用方法を学ぶ前に、基本的なことを理解しましょう

  • zip関数でできること
  • zip関数の使用場所

zip関数でできること

zip関数を使うと、リストやタプルなどの展開できるオブジェクトを複数まとめられます。

まとめることで、複数のデータを一括で処理できるようになるのです。

以下のようなデータ型でzip関数が使用できます。

  • リスト型
  • タプル型
  • 辞書型
  • セット型

zip関数の使用場所

zip関数の使用場所は、主にforループ内です。

複数のリストなどを一気に展開できるようになります。

ただし、以下のようにすればリスト化や辞書化することも可能です。

>>> sports = ["野球", "サッカー", "フィギュアスケート", "キックボクシング"]
>>> players = ["大谷", "三苫", "浅田", "那須川"]

#リスト
>>> zipped_list = list(zip(sports, players))
>>> print(zipped_list)
[('野球', '大谷'), ('サッカー', '三苫'), ('フィギュアスケート', '浅田'), ('キックボクシング', '那須川')]

#辞書
>>> zipped_dict = dict(zip(sports, players))
>>> print(zipped_dict)
{'野球': '大谷', 'サッカー': '三苫', 'フィギュアスケート': '浅田', 'キックボクシング': '那須川'}

#タプル
>>> zipped_tuple = tuple(zip(sports, players))
>>> print(zipped_tuple)
(('野球', '大谷'), ('サッカー', '三苫'), ('フィギュアスケート', '浅田'), ('キックボクシング', '那須川'))

Pythonのzip関数で知っておくべき4つのこと

Pythonのzip関数で、必ず知っておくべきことをご紹介します。

  • 要素が少ない方に合わせて処理がおこなわれる
  • 要素数を同じにしたいときに使える引数「strict」
  • 要素が多い方に合わせたいならzip_longest関数
  • zipでまとめたものを展開するアスタリスク

要素が少ない方に合わせて処理がおこなわれる

zip関数で知っておくべきことのひとつは、複数のリストをまとめる際に、少ない要素に合わせて処理がおこなわれること。

はみ出した要素は取り込まれません。

例えば、以下のようなケースをご覧ください。

>>> numbers = [1, 2, 3, 4]
>>> words = ["one", "two", "three"]
>>> for num, word in zip(numbers, words):
...     print(num, word)
... 
1 one
2 two
3 three

要素数を同じにしたいときに使える引数「strict」

引数「strict」をTrueにすると、要素数が異なる際にValueErrorが発生します。

デフォルトでは、引数「strict」はFalseになっているのです。

>>> numbers = [1, 2, 3, 4]
>>> words = ["one", "two", "three"]
>>> for num, word in zip(numbers, words, strict=True):
...     print(num, word)
... 
1 one
2 two
3 three
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: zip() argument 2 is shorter than argument 1

strict引数は、Python3.10以降で設定できます。

3.9以前のバージョンで指定することはできません。

要素が多い方に合わせたいならzip_longest関数

要素の長い方に合わせたいなら、zip_longest関数が使えます。

zip_longestでは、要素の長い方に合わせるので、もう片方はNoneとなるのがデフォルトの設定です。

>>> from itertools import zip_longest
>>> numbers = [1, 2, 3, 4]
>>> words = ["one", "two", "three"]
>>> for num, word in zip(numbers, words):
...     print(num, word)
... 
1 one
2 two
3 three
4 None

zipでまとめたものを展開するアスタリスク

zipでまとめたものを展開する方法をご紹介します。

アスタリスクを使えば、簡単に展開できるのです。

>>> sports = ["野球", "サッカー", "フィギュアスケート", "キックボクシング"]
>>> players = ["大谷", "三苫", "浅田", "那須川"]

#zipでリストを作る
>>> zipped_list = list(zip(sports, players))
>>> print(zipped_list)
[('野球', '大谷'), ('サッカー', '三苫'), ('フィギュアスケート', '浅田'), ('キックボクシング', '那須川')]

#ここからがリストの展開
>>> s, p = zip(*zipped_list)
>>> s
('野球', 'サッカー', 'フィギュアスケート', 'キックボクシング')
>>> p
('大谷', '三苫', '浅田', '那須川')

#辞書の場合は以下のとおり
>>> zipped_dict
{'野球': '大谷', 'サッカー': '三苫', 'フィギュアスケート': '浅田', 'キックボクシング': '那須川'}
>>> s, p = list(zipped_dict.keys()), list(zipped_dict.values())
>>> print(s)
['野球', 'サッカー', 'フィギュアスケート', 'キックボクシング']
>>> print(p)
['大谷', '三苫', '浅田', '那須川']

まとめ:Pythonのzip関数は複数の集合データをまとめられる

当記事の内容をまとめます。

  • zip関数は、複数のリストやタプルをまとめられる
  • zip関数の使用場所は主にforループ内
  • zip関数では要素の少ない方に合わせて処理がおこなわれる

Pythonのzip関数は、複数のリストやタプルをまとめられる便利なモジュールです。

覚えておくとさまざまな場面で活躍します。

もしわからなくなったらいつでも当記事に戻ってきてください。

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました