1. はじめに(導入文)
Pythonでリストやタプルなどの要素を繰り返し処理する際、「要素」と「そのインデックス(番号)」の両方を扱いたい場面はよくあります。そんなときに便利なのが enumerate()
関数です。
本記事では、Python初心者〜中級者向けに、enumerate()
の基本的な使い方から、実務で役立つ応用例までを丁寧に解説します。
「Python|enumerate()でループにインデックスを付ける」というテーマで、実行結果付きのサンプルコードも多数紹介していますので、ぜひ最後までご覧ください。
2. Pythonのenumerate()関数とは?
2-1. enumerate()
の基本構文と役割
enumerate()
は、リストやタプルなどのイテラブルなオブジェクトをループ処理する際に、各要素にインデックス(番号)を自動で付けてくれる便利な関数です。
基本構文は以下の通りです:
for index, value in enumerate(イテラブルオブジェクト):
# 処理
2-2. 基本的な使用例
以下のコードは、リスト内のフルーツ名とそのインデックスを表示する例です。
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
実行結果:
0: apple
1: banana
2: cherry
2-3. start
引数で開始番号を指定
デフォルトでは、インデックスは0
から始まりますが、enumerate()
の第2引数にstart=1
のように指定することで、任意の番号からインデックスを開始</strongできます。
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
実行結果:
1: apple
2: banana
3: cherry
3. enumerate()のよくある使い方・応用例
3-1. インデックス付きでデータを表示したいとき
たとえばアンケートの選択肢を番号付きで表示する場合にもenumerate()
が活躍します。
options = ['Python', 'Java', 'C++']
print("好きな言語を番号で選んでください:")
for i, lang in enumerate(options, start=1):
print(f"{i}. {lang}")
実行結果:
好きな言語を番号で選んでください:
1. Python
2. Java
3. C++
3-2. 条件分岐とインデックスを同時に扱いたいとき
特定の条件を満たす要素が何番目にあるかを調べるときにも使えます。
nums = [3, 7, 0, 5, 9]
for i, num in enumerate(nums):
if num == 0:
print(f"0はインデックス{i}にあります")
break
実行結果:
0はインデックス2にあります
3-3. 辞書のようなループにも応用可能
インデックスと要素をセットにして処理したい場面では、enumerate()
が非常に便利です。
tasks = ['洗濯', '掃除', '買い物']
task_dict = {i: task for i, task in enumerate(tasks)}
print(task_dict)
実行結果:
{0: '洗濯', 1: '掃除', 2: '買い物'}
4. enumerate()の注意点・エラー対策
4-1. イテラブルでないオブジェクトに使うとエラー
enumerate()
はリスト、タプル、文字列などの「繰り返し可能(イテラブル)なオブジェクト」に使います。
例えば整数などに使うとエラーになります。
num = 123
for i, v in enumerate(num): # ❌エラーになります
print(i, v)
実行結果:
TypeError: 'int' object is not iterable
→ このようなときはリストや文字列などに変換してから使いましょう。
4-2. tuple unpack(タプルの分解)に注意
以下のように、2つの変数でindex, value
を受け取らないとエラーになります。
for i in enumerate(['a', 'b', 'c']): # OK
print(i)
for i, v, x in enumerate(['a', 'b', 'c']): # ❌変数が多すぎてエラー
print(i, v, x)
実行結果(2つ目のループ):
ValueError: too many values to unpack (expected 2)
4-3. for文との比較で理解を深める
従来のfor文でインデックスを手動で管理する方法と比べると、enumerate()
の便利さがよくわかります。
# 手動でインデックスを管理する方法
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(i, fruits[i])
→ このようなコードはenumerate()
でシンプルに書き直せます。
5. まとめ
enumerate()
は、リストやタプルをループしながらインデックスを取得したいときに便利な関数です。start
引数を使えば、1
からなど任意の番号で開始できます。- アンケートや検索処理、辞書作成など、実務でも頻出の構文です。
特に初心者がfor文のインデックス管理で煩雑になってしまう場面で、enumerate()
は読みやすくミスの少ないコードを書く助けになります。
実務でもデータ処理やUI出力など、多くの場面で応用できるので、ぜひ積極的に活用してください。
学習のコツ:「まずは使ってみること」が上達への近道です。エラーが出たら落ち着いて、どんなオブジェクトに使っているか・変数の数が合っているかを確認しましょう。