Skip to content
チュートリアル
Python
マスタリングPython:2つのリストを簡単にZipする方法

マスタリングPython:2つのリストを簡単にZipする方法

Pythonは、読みやすさと洗練された構文でよく知られており、多数の組み込み関数を搭載しているため、開発者にとって生活を簡単にすることができます。 その中には、zip()関数という、複数のリストを並行して反復処理するための多目的ツールがあります。このガイドでは、Pythonのzip()関数に深く潜り込み、複数のリストをトラバースし、オンザフライで辞書を作成する方法を紹介します。

Python Pandas Dataframeからコードを書かずにクイックにデータ可視化を作成したいですか?

PyGWalkerは、可視化を伴う探索的データ分析のためのPythonライブラリです。 [PyGWalker](https://github.com/Kanaries/pygwalker)は、pandasデータフレーム(およびポーラルデータフレーム)をTableauスタイルのUIに変換し、ビジュアル探索のためのものにすることで、あなたのJupyterノートブックデータ分析およびデータ可視化ワークフローを簡略化できます。 (opens in a new tab)

[![データ可視化のためのPyGWalker](https://user-images.githubusercontent.com/8137814/221879671-70379d15-81ac-44b9-b267-a8fa3842a0d9.png)]( (opens in a new tab)https://github.com/Kanaries/pygwalker) (opens in a new tab)

Pythonのzip()関数の理解

zip()関数は、2つ以上の反復可能オブジェクト(リスト、タプル、またはセットなど)から要素をペアにしてタプルにします。関数は、これらのタプルを生成するイテレータを返します。渡された反復可能オブジェクトの長さが異なる場合、最小のアイテムを持つイテレータが生成される出力の長さを決定します。

list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
zipped = zip(list1, list2)
print(list(zipped))

これにより、次の出力が生成されます。

[('a'1)、( 'b'2)、( 'c'3)]

Pythonのzip()関数による並列反復

プログラミングでは、しばしば2つ以上のリストを並行してトラバースする必要があります。 zip()関数は、これを実現するためのシンプルで効率的な方法を提供し、インデックスの必要性を大幅に減らし、その結果、エラーの可能性が低下します。

学生の名前を含む1つのリストと、それぞれの成績を保存する別のリストがあるとします。各学生の名前と成績を印刷したい場合、zip()関数を使用できます。

students = ["Alice", "Bob", "Charlie"]
grades = [85, 90, 95]
 
for student, grade in zip(students, grades):
    print(f"{student}: {grade}")

Python zip()関数による辞書の作成

Pythonのzip()関数は、動的に辞書を作成する機能で光を放っています。Pythonの辞書は、データをキーと値のペアとして格納するデータ構造です。キーと対応する値を持つ2つのリストがある場合、zip()関数を使用して辞書に結合できます。

keys = ['apple', 'banana', 'cherry']
values = [1, 2, 3]
fruit_dict = dict(zip(keys, values))
print(fruit_dict)
 

これによって出力されるのは:

{'apple': 1, 'banana': 2, 'cherry': 3}

この機能は、特にデータ分析やその他の実世界のアプリケーションでのデータ構造の作成や操作において、動的に行うことができる多くの機会を提供します。

Pythonのzip()関数と順序付けされていないイテラブル

リストは順序付きコレクションですが、セットや辞書のような一部のPythonコレクションは順序付けられていません。つまり、要素に特定の順序がないことを意味します。これらの反復可能なものでzip()関数を使用するとどうなりますか?

順序付けられていないコレクションを使用する場合、zip()関数はまだタプルを生成しますが、これらのタプルの順序は、Pythonがコレクションの要素を内部的にどのように順序付けたかによって異なります。

set1 = {"apple", "banana", "cherry"}
set2 = {1, 2, 3}
zipped_set = zip(set1, set2)
print(list(zipped_set))

必ずしも順序通りにはなりませんが、出力は異なる場合があります。


前のセクションでは、Pythonのzip()関数の一般的な使用方法について調べました。この続きでは、この多目的な関数のさまざまなシナリオでの使用例を説明し、他のPython関数と比較します。

Pythonのzip()関数で現実世界の問題を解決する

Pythonのzip()関数は、さまざまなプログラミング問題を解決する優れたツールになることがあります。ビッグデータに対処するか、単にフライで辞書を作成するか、zip()関数はしばしばエレガントな解決策を提供します。

例えば、製品名を含む1つのリストと、それらの各価格を含む別のリストを扱う場合を考えてみましょう。最高価格の製品を見つけたい場合、zip()関数を使って簡単に実行できます。

products = ["Apples", "Bananas", "Cherries"]
prices = [1.5, 0.5, 3.2]
 
# 2つのリストをzip()関数で結合し、max()関数を使用する
max_price_product = max(zip(prices, products))
print(max_price_product)

出力は、最高価格のタプルで、最高価格の製品を示します。

Pythonのzip()関数とenumerate()関数の比較

zip()関数とenumerate()関数の両方が、反復可能なものを扱う組込みのPython関数です。私たちが見たように、zip()関数は複数の反復可能なものを同時に反復するために使用されます。一方、enumerate()関数は反復可能なものにカウンターを追加し、列挙オブジェクトを返します。

これらの関数は似ているかもしれませんが、異なる目的を持っています。zip()関数は、複数のリストを並列に反復する必要がある場合や、動的に辞書を作成する場合に最適です。一方、enumerate()関数は、要素のインデックスを印刷したり、要素のインデックスを伴うリストを反復する場合など、要素と一緒に自動カウンターが必要な場合に最適です。

Python zip()関数で辞書を作成する

先程の例では、Pythonのzip()関数は、動的に辞書を作成する場合に特に強力であることがわかりました。手動で辞書を作成することが不可能な大規模なデータセットを扱う場合、これは特に役立ちます。Pythonのzip()関数を使用すると、コードをより読みやすく効率的にし、時間と労力を節約することができます。

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
person_dict = dict(zip(names, ages))
print(person_dict)

これにより、次のように出力されます:

{'Alice': 25, 'Bob': 30, 'Charlie': 35}

結論

これで、Pythonのzip()関数についての詳しい解説は終わりです。複数のリストを並行してトラバースしたり、動的に辞書を作成したり、よりクリーンで効率的なコードを書こうとしている場合、zip()はPythonツールキットで貴重なツールとなることでしょう。

FAQ

  1. Pythonのzip()関数とは何ですか?

    zip()関数は、複数のリストやその他のイテラブルオブジェクトを並行して反復処理できるようにするPythonの組み込み関数です。それぞれのイテラブルから対応する要素をペアにして、タプルから成るzipオブジェクトを返します。

  2. Pythonのzip()関数は、長さが異なるリストとどのように動作しますか?

    zip()関数が異なる長さのリストと一緒に使用される場合、出力の長さは最短のリストによって決まります。長いリストの余分な要素は単に無視されます。

  3. Pythonのzip()関数は、セットや辞書と一緒に使用できますか?

    はい、zip()関数は、セットや辞書などの任意の型のイテラブルと一緒に使用できます。ただし、セットや辞書は順序のないコレクションであるため、結果のタプルの要素の順序は予測できないかもしれません。