注目キーワード

【Python】複数のリストなどのデータをzipで処理する

Pythonを書くとき、リストや辞書・集合など様々なデータ型を扱うことがあります。ここでは複数のデータ型を組み合わせてデータを読み込むときに便利な zip の使い方を説明します。

2つのリストに対する基本的な zip の使い方

zip の一番簡単な利用方法は、2つのリストの要素を一つずつ処理する場合になります。

サンプルソース(2つのリストのzip)

サンプルのソースコードです。

はじめに2つのリストを作成しました。list1は文字の文字コードの番号を、list2は文字を格納したリストです。zip() を用いると、2つのリストからデータを1つずつ取ってきてタプルにして処理することができます。

ここでは zip() を呼び出した後に list() を呼び出すと、新しいリストデータを取得することができます。またlist1からのデータをcode、list2からのデータをchとしてfor文で一行ずつ出力することもできます。

実行結果

実行結果です。新しいリストをまとめて出力した場合と、一行ずつ出力した場合の結果がそれぞれ確認できます。

2つのリストに対するzipの使用例

3つのリストに対するzipの適用例

zipは3つ以上の組に対しても同様な処理が可能です。ここでは3つ以上のリストの処理を例に、通常のzipとitertoolsに含まれているzip_longestの挙動を確認してみます。

サンプルソース(3つ以上のリストのzip)

サンプルの実装です。

ここでは大文字のリスト list3 を新しく用意して、処理を行います。

最初に新しく3つのリストからデータを1つずつ取り出して作成したlistをまとめて出力しています。

次にzipしたデータを1つずつ出力しています。ここでlist3は長さが5あり、他のlist1とlist2は長さが4なのですが、この場合データは短い方に揃えられます。python 3.10以降ではエラーを起こすこともできますが、ここでは利用していません。

最後にデフォルトでインストールされている itertools の zip_longest を利用して、長いリストに合わせてデータの足りない分を自動的に埋める処理を実行してみます。最後の結果のみ、5つ目の大文字であるEが出力されています(コードと小文字はNoneで埋められます)。

実行結果

実行結果は次のようになります。

3つのリストに対するzipとzip_longestの比較

zipしたデータをもとに戻す方法

zipしたペアのデータを元のリストに復元するために unzip という関数があっても良さそうなのですが、pythonでは実装されておりません。これを行うには、zipを可変長引数呼び出しすると良いです。

サンプルソース(zipを元に戻す)

サンプルの実装です。

1-2行目はデータを準備しています。

3行目で新しいリストを作成しています。

4行目では新しいリストのペア (97, ‘a’), (98, ‘b’) を可変長引数の呼び出し方法で全てzipに入力しています。

スポンサーリンク

5-7行目で処理結果を確認のために出力しています。

実行結果

実行結果になります。

2つのlistをzipし、元の2つのlistへ戻す処理の実行結果

新しく作ったリストから、元のリスト new_list1 と new_list2 を復元することができました。

複数のリストや辞書などをまとめて処理する際によく使う手法になりますので、使うことで見やすいコードや対応関係がはっきりしたコードが書けるのではないかと思います。ぜひ使ってみてください。