【Python入門】enumerate関数を初心者向けに完全解説!インデックス付きループの使い方

 

Pythonプログラミングにおいて、リストや文字列などのイテラブルオブジェクトを扱う際に非常に便利なのがenumerate関数です。この関数を使うことで、要素とそのインデックス(位置)を同時に取得できるため、コードがより読みやすく効率的になります。

enumerate関数とは

enumerate関数は、イテラブルオブジェクト(リスト、タプル、文字列など)を受け取り、各要素にインデックス番号を付けて返すPythonの組み込み関数です。

基本的な構文

enumerate(iterable, start=0)
  • iterable: 繰り返し処理したいオブジェクト
  • start: 開始インデックス(省略可能、デフォルトは0)

基本的な使い方

リストでの使用例

fruits = ['りんご', 'バナナ', 'オレンジ']
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

出力結果:

0: りんご
1: バナナ
2: オレンジ

文字列での使用例

text = "Python"
for i, char in enumerate(text):
    print(f"{i}: {char}")

出力結果:

0: P
1: y
2: t
3: h
4: o
5: n

開始インデックスの指定

startパラメータを使用して、開始インデックスを変更できます。

colors = ['赤', '青', '緑']
for i, color in enumerate(colors, start=1):
    print(f"{i}: {color}")

出力結果:

1: 赤
2: 青
3: 緑

従来の方法との比較

従来の方法(非推奨)

fruits = ['りんご', 'バナナ', 'オレンジ']
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

enumerate使用(推奨)

fruits = ['りんご', 'バナナ', 'オレンジ']
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

enumerateを使用する方が、より読みやすく、Pythonらしいコードになります。

実践的な活用例

1. リストの要素を条件付きで処理

scores = [85, 92, 78, 96, 88]
for i, score in enumerate(scores):
    if score >= 90:
        print(f"学生{i+1}: {score}点 - 優秀")

2. 複数のリストを同時に処理

names = ['田中', '佐藤', '鈴木']
ages = [25, 30, 28]

for i, (name, age) in enumerate(zip(names, ages)):
    print(f"{i+1}番目: {name}さん ({age}歳)")

3. ファイル内容の行番号付き表示

lines = ['1行目の内容', '2行目の内容', '3行目の内容']
for line_num, content in enumerate(lines, start=1):
    print(f"行{line_num}: {content}")

4. 辞書の作成

words = ['hello', 'world', 'python']
word_dict = {i: word for i, word in enumerate(words)}
print(word_dict)  # {0: 'hello', 1: 'world', 2: 'python'}

enumerate関数の戻り値

enumerate関数はenumerateオブジェクトを返します。これをリストに変換して中身を確認できます。

fruits = ['りんご', 'バナナ']
enum_obj = enumerate(fruits)
print(list(enum_obj))  # [(0, 'りんご'), (1, 'バナナ')]

よくある間違いと注意点

1. enumerate オブジェクトの再利用

# 間違った例
fruits = ['りんご', 'バナナ']
enum_fruits = enumerate(fruits)
list1 = list(enum_fruits)
list2 = list(enum_fruits)  # 空のリストになる

enumerateオブジェクトは一度消費されると再利用できません。

2. インデックスだけが必要な場合

インデックスのみが必要な場合は、range(len())を使用する方が適切です。

# インデックスのみ必要な場合
for i in range(len(fruits)):
    print(f"インデックス: {i}")

パフォーマンスの比較

enumeraterange(len())よりも高速で、メモリ効率も良好です。

import timeit

data = list(range(1000))

# enumerate使用
def with_enumerate():
    for i, item in enumerate(data):
        pass

# range(len())使用
def with_range_len():
    for i in range(len(data)):
        item = data[i]

一般的にenumerateの方が高速に動作します。

まとめ

enumerate関数は、Pythonプログラミングにおいて非常に有用な機能です。主なメリットは以下の通りです:

  • コードの可読性向上: インデックスと要素を同時に取得可能
  • エラーの削減: インデックス範囲外エラーを防止
  • パフォーマンス: range(len())より高速
  • Pythonらしい書き方: よりPythonicなコード

リストやタプル、文字列などのイテラブルオブジェクトを扱う際は、積極的にenumerate関数を活用して、より効率的で読みやすいコードを書きましょう。

関連記事

  • Python zip関数の使い方
  • Pythonリスト操作完全ガイド
  • Python for文とwhile文の使い分け

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座