Python

【Python】第2章第13回:enumerateを使った効率的なループ

Pythonのenumerate関数は、ループ処理で要素とそのインデックスを同時に取得するのに便利です。本記事ではenumerateの基本構文から応用例までを解説します。

0. 記事の概要

この記事を読むメリット

  • enumerateの基本を理解:効率的なループ処理の方法を学べます。
  • コードの可読性向上:従来のインデックス処理よりも簡潔に記述できます。
  • 実践的なスキルの習得:応用例を通じて、データ処理やリスト操作の技術を習得できます。

この記事で学べること

  • enumerateの基本構文と使い方
  • enumerateを用いた効率的なデータ処理
  • 実践的な応用例

1. enumerateの基本構造

1.1 基本的な使い方

enumerateは、リストやタプルなどのイテラブルなオブジェクトをループ処理する際、インデックスと要素を同時に取得するために使用されます。

# enumerateの基本例
names = ["Alice", "Bob", "Charlie"]

for index, name in enumerate(names):
    print(f"{index}: {name}")
動作解説
  1. namesリストの各要素がenumerateで処理されます。
  2. indexにインデックス番号、nameに要素が格納されます。
  3. 各インデックスと要素がprintで出力されます。

1.2 enumerateの引数

enumerateは、デフォルトでインデックスを0から開始しますが、開始値を指定することも可能です。

# enumerateの開始値を変更
names = ["Alice", "Bob", "Charlie"]

for index, name in enumerate(names, start=1):
    print(f"{index}: {name}")
動作解説
  1. start=1を指定することで、インデックスが1から始まります。
  2. 出力結果にはインデックスが1から表示されます。

2. enumerateを活用した応用例

2.1 条件付きの処理

特定の条件に応じてインデックスと要素を処理します。

# 条件付きで処理
scores = [80, 45, 90, 60, 72]

for index, score in enumerate(scores):
    if score < 50:
        print(f"警告: インデックス{index}のスコアが基準値を下回っています({score}点)")
動作解説
  1. スコアが50未満の場合、printで警告メッセージを出力します。
  2. インデックス番号とスコアの両方が表示されます。

2.2 複数リストの同期処理

enumerateを使用して、複数のリストを同時に処理します。

# 複数リストの同期処理
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

for index, (name, score) in enumerate(zip(names, scores)):
    print(f"{index}: {name}のスコアは{score}点です。")
動作解説
  1. zip(names, scores)でリストを結合し、それぞれの要素をタプルとして処理します。
  2. enumerateでインデックス番号を取得しつつ、namescoreを個別に扱います。

3. 実践例:enumerateを活用したプログラム

リスト内の値を平方し、その結果を別のリストに格納するプログラムを作成します。

# 値を平方してリストに格納
numbers = [1, 2, 3, 4, 5]
squares = []

for index, number in enumerate(numbers):
    squares.append(number ** 2)
    print(f"インデックス{index}: {number}の平方は{squares[-1]}です。")

print(f"結果のリスト: {squares}")
動作解説
  1. 各値を平方し、結果を新しいリストsquaresに追加します。
  2. enumerateでインデックス番号も取得し、進行状況を出力します。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. リストの要素を逆順に出力しながら、インデックス番号も表示してください。
  2. 複数のリストをenumeratezipを使用して処理し、各要素の組み合わせを出力してください。

5. 練習問題の解答と解説

問1の解答例

# リストの要素を逆順に出力
numbers = [10, 20, 30, 40, 50]

for index, number in enumerate(reversed(numbers)):
    print(f"逆順インデックス{index}: {number}")

問2の解答例

# 複数リストの処理
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]

for index, (name, age) in enumerate(zip(names, ages)):
    print(f"{index}: {name}は{age}歳です。")

6. まとめ

Pythonのenumerateは、ループ処理を効率化する強力なツールです。基本を押さえた上で、実践例や応用例にも挑戦してみてください。