コース一覧
    Pythonループ・関数
    enumerateで番号付け

    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分

    enumerateで番号付け

    enumerate で番号と中身を同時に

    何周目かを数えるためだけの変数

    おこづかい帳の一覧をただ並べるだけでは、「何件目を消したいのか」を伝えられません。行の頭に番号が振ってあれば、あとから「2 番を削除」と指示できます。

    番号を振るには、いまが何周目なのかを知る必要があります。素直に書くと、番号のための変数を自分で用意して、毎周 1 ずつ足すことになります。

    Python

    names = ["りんご", "みかん", "パン"]
    
    i = 1
    for name in names:
        print(i, name)
        i = i + 1

    動きはしますが、i = 1 と i = i + 1 という「番号の世話」がループの本題に混ざっています。初期化と更新のどちらかを書き忘れれば、番号だけが狂います。

    番号は 0 から始まる

    enumerate にリストを渡すと、番号と要素の 2 つ組 を順に出してくれます。

    Python

    for i, name in enumerate(names):
        print(i, name)

    0 りんご、1 みかん、2 パン と表示されます。for のうしろに名前を 2 つカンマで並べているところが新しい点です。出てきた 2 つ組が、順番どおりに i と name へ割り当てられます。番号の世話をする 2 行が丸ごと消えました。

    ただし番号は既定で 0 から始まります。人に見せる一覧は 1 から始めたいので、2 つ目の引数で開始番号を指定します。

    Python

    for i, name in enumerate(names, 1):
        print(i, name)

    これで 1 りんご から始まります。enumerate(names, 1) の 1 が開始番号です。

    区切りは行のうしろではなく手前に足す

    このコースの採点は戻り値を見るので、print ではなく 1 本の文字列を返します。ここで問題になるのが、行と行のあいだにだけ区切りを入れ、末尾には付けない、という点です。

    Python

    line = ""
    for word in ["赤", "青", "緑"]:
        if line != "":
            line = line + "、"
        line = line + word
    print(line)

    赤、青、緑 が出ます。まだ 1 件も入っていないときは区切りを足さず、2 件目以降のときだけ 手前に 足しています。うしろに足す形にすると、最後の 1 件のあとにも区切りが残ってしまいます。

    解説

    末尾の余分な改行は、画面で見ても区別がつきません。テストが落ちて原因が分からないときに、最初に疑うのがここです。

    やってみよう

    関数 numbered_list(names) を実装してください。引数 names は品名 (str) が並んだリストです。

    1 から始まる通し番号を振り、"1. りんご" の形に整えた行を、改行 \n でつないだ 1 本の文字列を return します。番号のうしろは半角ドットと半角スペース 1 つです。末尾に改行は付けません。

    numbered_list(["りんご", "みかん"]) の答えは "1. りんご\n2. みかん" です。空のリストのときは空文字 "" を返します。番号は数値なので、str で文字列に変えてからつなぎます。

    要件

    1. 関数名は numbered_list で、引数はリスト names の1つだけにする
    2. enumerate を使い、番号は 1 から始める
    3. 各行は "1. りんご" のように番号、半角ドット、半角スペース1つ、品名の順にする
    4. 行の区切りは \n を使い、末尾には改行を付けない

    ヒント

    enumerate(names, 1) と書くと番号が 1 から始まります

    for i, name in ... のように、名前を2つカンマで並べて受け取ります

    数値の番号は str(i) で文字列に変えてからつなぎます

    改行を行のうしろではなく手前に足すと、末尾に余分な改行が残りません

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

    関連レッスン

    • zipで組み合わせ

      zip で品名リストと金額リストを組にし、レシート行に整える pair_lines を作る

    • 入れ子ループ

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

    • つくる:何件でも記録

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

    • 第5章クイズ

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

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

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

    • 変数データに名前をつけて参照する仕組み
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • リスト順序付きで複数の値を扱うデータ構造
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    • テストバグを見つける工程
    • 関数処理に名前を付けて再利用できる単位
    main.py
    エディタを読み込んでいます

    メモ

    enumerateで番号付け

    ⌘S で保存