😊

【Python】zip()とは何か?

2025/03/14に公開

zip()関数は、複数のリストを組み合わせて新しいペアのリストを作る便利な関数です。

zip()とは何か?

まず、zip()という名前は「ジッパー」から来ています。

ジッパーがどのように働くか想像してみてください。

左側のギザギザと右側のギザギザがきれいに交互に組み合わさって一つになります。

プログラミングのzip()も同じように働きます!

zip()の例:簡単なケース

たとえば、2つのリストがあるとします:

  • 名前のリスト:["田中", "佐藤", "鈴木"]
  • 点数のリスト:[85, 92, 78]

zip(名前リスト, 点数リスト)を実行すると、次のようなペアのリストが作られます:
[("田中", 85), ("佐藤", 92), ("鈴木", 78)]

各ペアは、同じ位置(インデックス)にある要素同士を組み合わせたものです。

具体的な使用例

ここで、result = sum([x * y for x, y in zip(V1, V2)])という式を見てみましょう。

  1. zip(V1, V2):V1とV2という2つのリストの要素を対応する位置でペアにします。
    例えば、V1 = [1, 2, 3]、V2 = [4, 5, 6]なら、結果は [(1,4), (2,5), (3,6)]

  2. [x * y for x, y in zip(V1, V2)]:これは「リスト内包表記」と呼ばれ、各ペア(x, y)に対して x * y を計算し、新しいリストを作ります。
    例: [(1,4), (2,5), (3,6)] → [14, 25, 3*6] → [4, 10, 18]

  3. sum([x * y for x, y in zip(V1, V2)]):最後に、このリストの合計を計算します。
    例: [4, 10, 18] → 4 + 10 + 18 → 32

別の例で全体を見る

以下のリストの場合どうなるか、全体像を見てみましょう:

  • V1 = [3, 1, 4]
  • V2 = [2, 5, 3]

ステップ1:zip(V1, V2) → [(3,2), (1,5), (4,3)]
ステップ2:[x * y for x, y in zip(V1, V2)] → [32, 15, 4*3] → [6, 5, 12]
ステップ3:sum([x * y for x, y in zip(V1, V2)]) → 6 + 5 + 12 → 23

この式全体は、実は「ベクトルの内積(ドット積)」と呼ばれる数学の演算を計算しています。

二つのベクトルの対応する要素同士を掛け合わせ、その結果をすべて足し合わせるものです。

Discussion