【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}")
動作解説
names
リストの各要素がenumerate
で処理されます。index
にインデックス番号、name
に要素が格納されます。- 各インデックスと要素が
print
で出力されます。
1.2 enumerateの引数
enumerate
は、デフォルトでインデックスを0から開始しますが、開始値を指定することも可能です。
# enumerateの開始値を変更
names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names, start=1):
print(f"{index}: {name}")
動作解説
start=1
を指定することで、インデックスが1から始まります。- 出力結果にはインデックスが1から表示されます。
2. enumerateを活用した応用例
2.1 条件付きの処理
特定の条件に応じてインデックスと要素を処理します。
# 条件付きで処理
scores = [80, 45, 90, 60, 72]
for index, score in enumerate(scores):
if score < 50:
print(f"警告: インデックス{index}のスコアが基準値を下回っています({score}点)")
動作解説
- スコアが50未満の場合、
print
で警告メッセージを出力します。 - インデックス番号とスコアの両方が表示されます。
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}点です。")
動作解説
zip(names, scores)
でリストを結合し、それぞれの要素をタプルとして処理します。enumerate
でインデックス番号を取得しつつ、name
とscore
を個別に扱います。
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}")
動作解説
- 各値を平方し、結果を新しいリスト
squares
に追加します。 enumerate
でインデックス番号も取得し、進行状況を出力します。
4. 練習問題
以下の課題に挑戦してみましょう。
- リストの要素を逆順に出力しながら、インデックス番号も表示してください。
- 複数のリストを
enumerate
とzip
を使用して処理し、各要素の組み合わせを出力してください。
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
は、ループ処理を効率化する強力なツールです。基本を押さえた上で、実践例や応用例にも挑戦してみてください。