以前、for文の記事で、リストの中身を順番に取り出す方法を学習しました。リストのデータを表示する際、「1番: 〇〇、2番: ○○、…」のように順番(インデックス番号)も一緒に表示したい場面がよくあります。今回は、それを非常にシンプルに書くことができる便利な機能「enumerate(エニュメレート)関数」について解説します。

enumerate関数を使用する

Pythonでenumerate関数を使うには、forin の間に「インデックス変数」と「要素変数」をカンマ区切りで書き、 in の後ろに enumerate(リスト)を記述します。

for インデックス変数, 要素変数 in enumerate(リスト):
    実行したい処理

の形式で記述します。この例ではインデントは半角スペース四つで行っています。統一しているならインデントは半角スペース二つなどでも構いません。

具体的には、次のような順番で処理が行われます。

  • データの取り出しと番号の生成: まず、enumerate()関数が括弧の中に指定されたリストからデータを1つずつ取り出します。その際、ただデータを取り出すだけでなく、「0から始まるインデックス番号」を自動的に生成し、データと番号のペアを作ります。
  • 変数への代入: そして、その生成された番号が左側のインデックス変数に、取り出されたデータが右側の要素変数にそれぞれ同時に代入され、その下のループ内の処理が実行されます。
  • 処理の繰り返し: これをリストの最後まで繰り返すことで、自分で番号を数えるためのカウンター変数を用意して「ループのたびに1を足す」といった処理を書かなくても、自動的に連番を取得できるようになります。

では、実際にやってみましょう。
Google Colaboratory (Colab) を開いて新しいノートブックを作成し、リストの中身を番号付きで表示するプログラムを書いてみます。

# 果物の名前が入ったリストを用意する
fruits = ["もも", "なし", "かき"]

# enumerate関数でインデックス番号と要素を同時に取得する
for index, fruit in enumerate(fruits):
  print(f"インデックス{index}のデータは{fruit}です。")

とセルに入力して実行してみましょう。すると結果は

インデックス0のデータはももです。
インデックス1のデータはなしです。
インデックス2のデータはかきです。

のように表示されます。

プログラムの解説(enumerate)

  • リストの準備(2行目): 変数 fruits に、文字列が入ったリストを用意しています。
  • enumerate関数の実行(5行目): for index, fruit in enumerate(fruits): と記述しています。enumerate() 関数がリストから要素を取り出すと同時に、0から始まる番号を生成します。生成された番号が変数 index に、リストのデータが変数 fruit に代入されます。
  • 結果の表示(6行目): インデックス番号とデータを使ってprint 関数で文章を表示しています。

番号の開始位置を指定する(start)

そのままでは0から番号が振られますが、人間にとって分かりやすいように「1」から始めたい場合もあります。その時は、enumerate()の括弧の中にカンマ区切りでstart=1 と記述します。

for インデックス変数, 要素変数 in enumerate(リスト, start=1):
    実行したい処理

の形式で記述します。
この例ではインデントは半角スペース四つで行っています。統一しているならインデントは半角スペース二つなどでも構いません。

具体的には、このstart=1という記述を追加することで、内部で自動生成される番号のスタート地点が「0」から指定した数字である「1」に変更されます。もちろん、start=10とすれば10から連番を作ることも可能です。

では、実際にやってみましょう。
順位を表示するプログラムを書いてみましょう。

# ランキングのリストを用意する
ranking = ["金メダル", "銀メダル", "銅メダル"]

# start=1 を指定して、1から始まる順位と要素を取得する
for rank, item in enumerate(ranking, start=1):
  print(f"{rank}位: {item}")

とセルに入力して実行してみましょう。すると結果は

1位: 金メダル
2位: 銀メダル
3位: 銅メダル

のように表示されます。

プログラムの解説(start=1の利用)

  • リストの準備(2行目): 変数ranking に、文字列が入ったリストを用意しています。
  • start引数の利用(5~6行目): for rank, item in enumerate(ranking, start= 1): と記述しています。括弧の中に start=1 を追加したことで、生成される番号が1からスタートするようになります。この番号が変数rankに代入され、より人間にとって自然なランキング表記が実現できています。

まとめ

今回は、for文で順番(インデックス番号)を簡単に取得できる「enumerate関数」について解説しました。

  • enumerate関数とは: for文でリストから要素を取り出す際、0から始まるインデックス番号も同時に自動生成して取得できる機能。
  • 書き方のルール: for インデックス変数, 要素変数 in enumerate(リスト): の形式で記述し、2つの変数でペアを受け取る。
  • start引数: enumerate(リスト, start=1) のように指定することで、番号のスタート地点を自由に変更できる。ランキング表示などに便利。

この機能を使うと、カウント用の変数を自分で用意して +1 していくような処理を省くことができ、コードがすっきりします。ぜひ試してみてください。

open-in-colab

今回はこれで終了です。
今回のサンプルを用意したので、もし必要な場合は上の「Open in Colab」と書いてあるボタンをクリックしてください。なおそのままだと編集不可なので編集をしたい場合は「ドライブにコピー」をクリックしてコピーしてください。
なおGoogle ColaboratoryについてわからなかったらGoogleColaboratoryを使ってみよう_導入編をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA