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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

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

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

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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関数は、複数のリストやタプルをまとめられる便利なモジュールです。

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

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

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