コース一覧
    Pythonループ・関数
    zipで組み合わせ

    Pythonループ・関数

    ループと関数の基本を学び、繰り返し処理を分割して読みやすく書けるようにします。

    1
    ループ
    01. forで合計15分
    02. whileで繰り返す15分
    03. rangeとstep15分
    04. breakとcontinue15分
    05. enumerateで番号付け15分
    06. zipで組み合わせ15分
    07. 入れ子ループ15分
    08. つくる:何件でも記録15分
    09. 第5章クイズ10分
    2
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. デフォルト引数15分
    04. キーワード引数15分
    05. 複数の戻り値15分
    06. divmod15分
    07. 変数のスコープ15分
    08. lambda関数15分
    09. つくる:関数に分割15分
    10. 第6章クイズ10分

    zipで組み合わせ

    zip でペアにする

    番号でそろえると、片方だけずれる

    ここまでは 1 本のリストを回してきました。ところが実際のおこづかい帳では、品名と金額という 2 つの情報が組になっています。まだ辞書を習っていないので、いまは 2 本のリストに分かれている状況を考えます。

    Python

    names = ["りんご", "みかん", "パン"]
    categories = ["食費", "食費", "娯楽"]

    同じ位置どうしが対応している、という約束で並んでいます。素直に書くと、位置を表す番号を使って両方から取り出すことになります。

    Python

    for i in range(len(names)):
        print(names[i] + " は " + categories[i])

    動きますが、i という番号がコードの主役になってしまいます。names[i] と categories[i] の片方だけ書き間違えると、組がずれます。しかも片方が短いと IndexError で落ちます。

    同じ位置どうしを 1 組で取り出す

    zip は、複数のリストから 同じ位置の要素をまとめて 1 組ずつ 出してくれます。

    Python

    for name, category in zip(names, categories):
        print(name + " は " + category)

    enumerate のときと同じく、for のうしろに名前を 2 つ並べて受け取ります。番号を表す変数が消え、やりたいことだけがコードに残りました。3 本以上のリストも渡せて、その場合は受け取る名前も 3 つ並べます。

    短いほうに黙って合わせる

    zip は、渡されたリストのうち いちばん短いもの に合わせて止まります。

    Python

    names = ["りんご", "みかん", "パン"]
    categories = ["食費", "食費"]
    
    for name, category in zip(names, categories):
        print(name, category)

    出るのは 2 組だけで、パン は相手がいないので捨てられます。エラーにならず黙って切り捨てるので、件数がずれていても気づけません。件数が合うことを前提にしたいなら、len を比べて確かめる処理を自分で書きます。

    どちらかが空のリストなら 1 組も出ないので、入れ物は用意したときのまま残ります。

    解説

    zip に渡し忘れて for name, category in names: と書くと、1 件を 2 つに分けようとして ValueError になります。組にするには zip が要ります。

    やってみよう

    関数 pair_lines(names, prices) を実装してください。引数は 2 つで、names は品名 (str) のリスト、prices は金額 (int) のリストです。

    zip で同じ位置どうしを組にし、"りんご 120円" の形に整えた行を改行 \n でつないだ 1 本の文字列を return します。品名と金額のあいだは半角スペース 1 つ、金額のうしろは全角の 円 です。末尾に改行は付けません。

    長さが違うときは zip の性質どおり、短いほうに合わせて切り上げます。どちらも空のときは空文字 "" を返します。区切りの入れ方は前回と同じ考え方です。

    要件

    1. 関数名は pair_lines で、引数は names と prices の2つにする
    2. zip を使って同じ位置の品名と金額を組にして取り出す
    3. 各行は "りんご 120円" のように品名、半角スペース1つ、金額、全角の円 の順にする
    4. 行の区切りは \n を使い、末尾には改行を付けない

    ヒント

    for name, price in zip(names, prices) の形で2つ同時に受け取れます

    金額は str(price) で文字列に変えてからつなぎます

    改行を行の手前に足すと、末尾に余分な改行が残りません

    zip は短いほうのリストに合わせて止まるので、長さのずれは自然に処理されます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • 入れ子ループ

      ループの中にループを書いて九九の表を組み立てる multiplication_table を作る

    • つくる:何件でも記録

      第5章の総仕上げ。記録の集まりから番号付き一覧と合計を返す show_all を作る

    • 第5章クイズ

      for と while、range の刻み幅、break と continue の違い、enumerate と zip を5問で確認する

    • 関数を定義する

      def で処理に名前を付け、呼び出して使う。定義と呼び出しの違いを理解する

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • リスト順序付きで複数の値を扱うデータ構造
    • 変数データに名前をつけて参照する仕組み
    • 処理計算や代入を表す長方形
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    zipで組み合わせ

    ⌘S で保存