Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python zip()関数とは?使い方をステップバイステップで徹底解説

Pythonのzip()関数は、複数のイテラブル(反復可能オブジェクト)を受け取り、それらを1つのタプルにまとめるための組み込み関数です。戻り値は「zipオブジェクト」と呼ばれ、イテラブル同士の値がペアとして格納されます。リスト、タプル、セット、辞書など、さまざまなイテラブルをzip()関数に渡すことができます。


Pythonには、データを効率的にループ処理するための組み込み関数が多数用意されています。そのひとつがzip()です。zip()関数は、2つ以上のデータソースから要素を取り出し、それらを1つにまとめたイテレータを生成します。

本記事では、Python zip()の基本をわかりやすく解説します。さらに、zipオブジェクトの反復処理の方法や、zipしたデータを元に戻す「アンzip」のやり方についてもご紹介します。

Pythonのイテレーションのおさらい

Pythonにおいて「イテレート(反復処理)」とは、プログラムがリストの要素を順番に処理していくことを指します。例えば、企業が運営するすべての支店名を出力するforループがある場合、このプログラムは「支店名のリストを反復処理している」と表現できます。

一方、「イテラブル」とは、そのメンバーである要素を個別に取り出せるオブジェクトのことです。配列はイテラブルの一種で、forループを使えば各要素を1つずつ出力できます。

Pythonのzip()関数の基本

zip()関数は、2つ以上のイテラブルの内容を結合し、zipオブジェクトを返します。これは、引数として渡されたすべての値がペアとして格納された、タプルのイテレータです。

Pythonのzip()関数は、リスト・タプル・セット・辞書といったイテラブルを引数として受け取ります。そして、渡された各イテラブルから要素を取り出し、それらを組み合わせたタプルのコレクションを生成します。

zip()関数の構文は以下の通りです。

zip(iterable1, iterable2, ...)

イテラブルはいくつでも指定でき、結合したいイテラブルを引数として渡すだけでOKです。

zip()メソッドは、イテラブルが使い果たされるまで実行を続けます。つまり、作成可能なすべてのペアが生成された時点で自動的に停止します。

zip()関数の実用例

ここで、2つのPythonリストを例に考えてみましょう。片方は従業員の名前、もう片方は従業員番号を格納したリストです。両方のリストをタプルの配列にまとめれば、従業員の名前と番号を並べて管理できるようになります。

zip()関数を使えば、2つのリストを簡単に結合できます。以下はそのサンプルプログラムです。

employee_numbers = [2, 9, 18, 28]
employee_names = ["Candice", "Ava", "Andrew", "Lucas"]

zipped_values = zip(employee_names, employee_numbers)
zipped_list = list(zipped_values)

print(zipped_list)

このコードを実行すると、次の出力が得られます。

[('Candice', 2), ('Ava', 9), ('Andrew', 18), ('Lucas', 28)]

プログラムはタプルの配列を作成しました。各タプルには、従業員の名前と対応する従業員番号がセットで含まれています。

コードの最初の2行では、従業員番号と従業員名を格納する変数を宣言しています。続いてzip()関数を実行し、2つのリストを結合して新しいタプルの配列を生成しています。

その後、zipオブジェクトをリストに変換している点に注目してください。zip()関数はzipオブジェクトを返すため、そのままコンソールに出力しても中身を読みやすい形で確認できません。内容を確認するには、リストへの変換が必要です。

zipped_valuesがzipオブジェクトであることを確認するには、次のコードを追加します。

print(type(zipped_values))

実行結果は以下の通りです。

<class 'zip'>

上記の例では2つの要素を結合しましたが、3つ以上の要素を結合したい場合も手順は同じです。追加したいリストをzip()関数の引数に加えるだけです。

zip()を使った複数イテラブルのループ処理

zip()関数はイテレータを返すため、結合された各要素を個別に取り出して処理できます。

複数のイテラブルを同時に扱うことは、Pythonのzip()関数の最も一般的なユースケースのひとつです。例えば、複数のリストを並行して処理したい場合に、zip()関数が大いに役立ちます。

実際に、zip()関数を使ってemployee_numbersemployee_namesの両方のリストを反復処理してみましょう。

employee_numbers = [2, 9, 18, 28]
employee_names = ["Candice", "Ava", "Andrew", "Lucas"]

for name, number in zip(employee_names, employee_numbers):
	print(name, number)

このコードの出力は次の通りです。

Candice 2
Ava 9
Andrew 18
Lucas 28

このプログラムは、zip()が返すタプルのリストを反復処理し、それぞれのタプルをnamenumberという2つの値に分割します。

これにより、複数のイテラブルオブジェクトを一度に簡単に処理できるようになり、従業員名と対応する従業員番号を並べて表示できます。もちろん、3つ以上のイテラブルに対しても同じ方法で反復処理が可能です。

Pythonでzipを解除(アンzip)する方法

ここまで、さまざまなデータをzipしてきました。では、元の形式に戻すにはどうすればよいのでしょうか? タプルのリスト(zip済みの値)を分割したい場合は、zip()関数のアンパック演算子を使用します。これは、zip()関数と組み合わせて使うアスタリスク * のことです。

以下は、アンパック演算子を使用した具体例です。

employees_zipped = [('Candice', 2), ('Ava', 9), ('Andrew', 18), ('Lucas', 28)]
employee_names, employee_numbers = zip(*employees_zipped)

print(employee_names)
print(employee_numbers)

このコードの出力は次の通りです。

('Candice', 'Ava', 'Andrew', 'Lucas')
(2, 9, 18, 28)

コードの最初の行では、タプルのリストを含む変数を定義しています。次の行では、employee_namesemployee_numbersという2つの変数を定義し、アンzipした結果をそれぞれ代入しています。

アンzipとは、employees_zipped変数をアンパック演算子 * によって解凍する操作のことです。上記の例では、従業員名と従業員番号を含む2つの新しい変数を出力しています。

まとめ

zip()関数は、イテラブルオブジェクトを入力として受け取り、それらを1つのzipオブジェクトに結合します。このzipオブジェクトにより、各イテラブルの値を並べて扱うことができます。複数の配列やタプルを1つにまとめたい場合に非常に便利な機能です。

本記事では、zip()関数の基本的な使い方から、イテラブルのループ処理、zip済みデータの解凍方法までを解説しました。これであなたも、Pythonのzip()関数を使いこなせる一歩を踏み出せたはずです。

Python開発の学習に関するさらなるヒントやアドバイスについては、「How to Code in Python」ガイドもぜひ参考にしてください。

  1. Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説

    Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し

  2. Pythonのzip()関数の使い方を徹底解説!複数のイテラブルをまとめて処理する方法

    zip() 関数は、複数のイテレータ(イテラブル)をまとめてグループ化するために使われる組み込み関数です。この記事では、zip() の基本的な使い方から、展開(アンジップ)のテクニック、実践的な活用例まで詳しく解説します。zip()関数のドキュメントを確認するまずは help() メソッドを使って、zip() 関数の公式ドキュメントを見てみましょう。以下のコードを実行してください。コード例help(zip)上記のプログラムを実行すると、次のような結果が表示されます。出力結果Help on class zip in module builtins: class zip(object) |