(最終更新月:2022年12月)
✔このような方へ向けて書かれた記事となります
「Pythonのzip関数について基本が知りたい」
「zip関数って何ができるの?」
「zip関数を使った実際のコードが見てみたい」
✔当記事を通じてお伝えすること
- zip関数でできること
- zip関数で気を付けること
- zip関数の応用:zip_longestやstrict引数
当記事では、Pythonのzip関数について、基本はもちろん、注意点や実例まですべて理解いただけるよう解説していきます。
ぜひ最後までご覧ください。
もしPythonでZIPファイルを圧縮・解凍したいという方は以下の記事をどうぞ。
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関数は、複数のリストやタプルをまとめられる便利なモジュールです。
覚えておくとさまざまな場面で活躍します。
もしわからなくなったらいつでも当記事に戻ってきてください。