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

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

zip() 関数は、複数のイテレータ(イテラブル)をまとめてグループ化するために使われる組み込み関数です。この記事では、zip() の基本的な使い方から、展開(アンジップ)のテクニック、実践的な活用例まで詳しく解説します。

zip()関数のドキュメントを確認する

まずは help() メソッドを使って、zip() 関数の公式ドキュメントを見てみましょう。以下のコードを実行してください。

コード例

help(zip)

上記のプログラムを実行すると、次のような結果が表示されます。

出力結果

Help on class zip in module builtins:
class zip(object)
    | zip(iter1 [,iter2 [...]]) --> zip object
    |
    | Return a zip object whose .__next__() method returns a tuple where
    | the i-th element comes from the i-th iterable argument. The .__next__()
    | method continues until the shortest iterable in the argument sequence
    | is exhausted and then it raises StopIteration.
    |
    | Methods defined here:
    |
    | __getattribute__(self, name, /)
    | Return getattr(self, name).
    |
    | __iter__(self, /)
    | Implement iter(self).
    |
    | __new__(*args, **kwargs) from builtins.type
    | Create and return a new object. See help(type) for accurate signature.
    |
    | __next__(self, /)
    | Implement next(self).
    |
    | __reduce__(...)
    | Return state information for pickling.

ドキュメントによると、zip() は各イテラブルの i 番目の要素を組み合わせたタプルを返すオブジェクトを作成し、最も短いイテラブルが尽きた時点で処理を終了する仕様であることがわかります。

zip()の基本的な使い方

それでは、実際に簡単な例で動作を確認してみましょう。名前のリストと年齢のリストを zip() で結合します。

コード例

## リストを2つ用意
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## 2つのリストをzipで結合
## 対応する要素同士がペアになったタプルのリストが返される
print(list(zip(names, ages)))

実行すると、以下のような結果になります。

出力結果

[('Harry', 19), ('Emma', 20), ('John', 18)]

このように、zip() を使うことで、複数のリストから対応する要素を簡単にペア化できます。

zip()で結合したデータを展開する(アンジップ)

zip() で結合した要素は、逆に元の形へ展開(アンジップ)することも可能です。その際は、結合済みのオブジェクトの前に *(アスタリスク)を付けて zip() に渡します。

コード例

## リストを2つ用意
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## 2つのリストをzipで結合
zipped = list(zip(names, ages))
## アンジップ(展開)
new_names, new_ages = zip(*zipped)
## 展開後の値を確認
print(new_names)
print(new_ages)

実行すると、元のリストの内容がタプルとして復元されます。

出力結果

('Harry', 'Emma', 'John')
(19, 20, 18)

zip()の実践的な活用例

zip() の最も一般的な用途は、for ループ内で複数のイテラブルから対応する要素を同時に取り出すことです。次の例を見てみましょう。

コード例

## リストを2つ用意
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## zip()を使って名前と年齢を対応させて表示
for name, age in zip(names, ages):
    print(f"{name}さんの年齢は{age}歳です")

実行すると、名前と年齢がきれいに対応づけられて出力されます。

出力結果

Harryさんの年齢は19歳です
Emmaさんの年齢は20歳です
Johnさんの年齢は18歳です

まとめ

Pythonの zip() 関数を使うと、複数のリストやイテラブルの対応する要素を簡単にまとめて処理できます。ポイントは以下の通りです。

  • zip() は各イテラブルの同じ位置の要素をタプルとしてペア化する
  • 最も短いイテラブルの長さに合わせて処理が終了する
  • *(アスタリスク)を使うことで、結合したデータを元に戻す(アンジップ)ことができる
  • for ループと組み合わせると、複数のシーケンスを同時に扱えて便利

データの対応関係を扱う場面で非常に役立つ関数なので、ぜひ活用してみてください。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print