Pythonのzip関数は、イテラブルオブジェクトを結合する
pythonのzip関数
zip関数は、複数のイテラブルオブジェクトの要素をまとめて1つのイテラブルオブジェクトを生成する関数です。
いわゆる「ガッチャンコ」するための関数です。
イテラブルオブジェクトとは、リストやタプルなど、for文で反復処理ができるオブジェクトのことを指します。
zip関数を使う場合、複数のイテラブルオブジェクトを引数として指定します。このとき、指定したイテラブルオブジェクトの長さは同じでなければなりません。zip関数は要素を結合して1つのイテラブルオブジェクトを生成します。
zip関数を使えば、例えば2つのリストを結合して1つのリストを生成することができます。複数のリストをzip関数の引数に指定すると、リストの要素を結合してタプルのリストを生成します。このように、複数のイテラブルオブジェクトを1つのイテラブルオブジェクトにまとめると、単一のfor文で反復処理がしやすくなります。
関連 Pythonのfor文
また、ファイルの圧縮・解凍をおこなうのは「zipfile」モジュールで、zip関数とは別物です。
pythonのzipで、3つのリストを1つのタプルにzipするサンプルコード
zipは、2つ以上のリストを1つのタプルに結合することができます。以下は3つのリストを1つのタプルにzipする例です。
```python list_1 = [1, 2, 3] list_2 = [4, 5, 6] list_3 = [7, 8, 9] # zip関数で3つのリストを1つのタプルにzipする zipped_lists = zip(list_1, list_2, list_3) # 実行結果を出力 print(list(zipped_lists)) ```
実行するとこうなります。
``` [(1, 4, 7), (2, 5, 8), (3, 6, 9)] ```
zip関数には3つのリストを引数として渡し、タプルを作成します。実行結果として、3つのリストの要素を組み合わせたタプルのリストが出力されます。
zipする要素数が同じかどうかをチェックするサンプルコード
zipする対象は要素数が同じである必要があります。もっとも簡単に要素数チェックをおこなう方法は、zip関数にstrict指定をつける方法です。
```python # サンプルコード list1 = ['a', 'b', 'c'] list2 = ['1', '2', '3', '4'] try: zipped_list = zip(list1, list2, strict=True) except ValueError: print('要素数が異なります。') # 実行例 要素数が異なります。 ```
実行するとこうなります。
要素数が異なります。
上記のサンプルコードは、Pythonのzip関数を使って、要素数のチェックをおこなうものです。
まず、zip関数を使ってlist1とlist2をつなげる形でzipped_listを生成しています。その際、strict引数を使って、要素数のチェックを行っています。strict引数をTrueにすると、要素数が異なる場合にはValueErrorを例外として発生するようになります。try except構文にて、ValueErrorを捕捉しています。
list1とlist2の要素数が異なる場合、ValueErrorが発生するかどうかで、要素数のチェックを行っています。
実行例では、list1とlist2の要素数が異なるため、ValueErrorとなり、「要素数が異なります。」と表示されています。
dict(辞書)をzipするサンプルコード
dictをzipすることで、複数のdictを1つのtupleのリストに変換することができます。各tupleには、それぞれのdictのkeyとvalueが入っているので、複数のdictのデータを効率的に取り扱うことができます。また、dictのkeyを元に複数のdictを検索したり、複数のdictを結合したり、マージしたりすることも可能になります。
また、dictをzipすることで複数のdict内の要素を取り出して行列やリストに格納することもできます。
```python d1 = {'a': 1, 'b': 2, 'c': 3} d2 = {'x': 10, 'y': 11, 'z': 12} zipped_dict = zip(d1.items(), d2.items()) print(list(zipped_dict)) ```
実行するとこうなります。
[(('a', 1), ('x', 10)), (('b', 2), ('y', 11)), (('c', 3), ('z', 12))]
Pythonのzip関数を使って複数の辞書をzipしています。
このコードでは、まず2つの辞書を変数d1とd2に格納します。次に、d1.items()とd2.items()を引数にしてzip関数を呼び出し、zipped_dictに格納します。最後に、zipped_dictをlist関数でタプルからリストに変換して表示します。
実行結果としては、2つの辞書をキーと値を一つのタプルにまとめたリストが表示されます。
キーと値のリストをzipで結合し、enumerateでインデックス番号を振る
辞書のキーリストと値リストがあり、インデックス番号を付与したタプルを生成する例。インデックス番号でキーや値を参照することができるようになります。
単に「番号振って、一覧を見たい」というときにも使えます。
key_list = ["A","B","C"] value_list = [1,2,3] for i, (key, value) in enumerate(zip(key_list, value_list)): print(i, key, value)
実行するとこうなります。
0 A 1 1 B 2 2 C 3
上記のサンプルコードでは、キーのリストと値のリストをzip関数を用いて結合し、enumerate関数を用いて番号を振る処理を行っています。
zip関数では、複数のリストを結合してタプルのリストを生成します。enumerate関数では、リスト内の要素に番号を振る処理を行います。
上記のサンプルコードを実行すると、キーと値のタプルのリストに対して、番号を振りながらキーと値を順番に出力する結果が得られます。
Pythonのzipのまとめ
- zip関数は複数のイテラブルオブジェクトを1つのタプルにまとめる
- strict指定をすることで、要素数チェックが可能
- enumerateを組み合わせて、zipしたタプルにインデックス番号を付与できる