Pythonにおけるenumerateを用いたfor文の使い方について解説します。
Contents
for文におけるenumerateの基本的な使い方
Pythonの繰り返し(ループ)処理ではfor文を使用します。Pythonにおけるfor文の基本的な使い方は「for文の基本的な使い方」にまとめていますので興味があれば参考にしてください。
Pythonのfor文では、リスト、辞書、集合等のイテラブル(iterable)なオブジェクトから要素を取り出して処理をします。そのため、今取り出している要素が何番目の要素なのかを判断することができません。
C言語等のプログラミング言語に慣れている人は「for(i =0; i < 10; i++)」というように何番目の要素を処理しているかが明確なので、Pythonを使うときに違和感を感じるかもしれません。
Pythonにて処理している要素のインデックス番号をfor文の繰り返し(ループ)処理内であわせて使用したい場合には、enumerateを使用することで実現できます。
本記事では、enumerateの基本的な使い方について例を用いて説明します。
enumerateの基本的な使い方
インデックス番号と値をそれぞれ取得してfor文を実行する場合
enumerateでfor文による繰り返し(ループ)処理を実行する場合は、以下例のenumerate(data)のようにリスト等を引数に渡してinに指定することで、「インデックス番号」と「値」の組を順に取り出します。
data = ["A", "B", "C", "D", "E"] # enumerateでインデックス番号と値を取り出して処理 for idx, dt in enumerate(data): print(f"idx: {idx}, dt: {dt}")
【実行結果】 idx: 0, dt: A idx: 1, dt: B idx: 2, dt: C idx: 3, dt: D idx: 4, dt: E
上記例では、各要素のインデックス番号がidxに、値がdtに順に入ってきます。このように、for文の中で今扱っている値が何番目のデータかを確認しながらfor文の繰り返し(ループ)処理を実行することができます。
タプル(tuple)で取得してfor文を実行する場合
enumerateの返却値としては、タプル(tuple)が返却されています。上記で見てきた基本的な使い方では、返却値のタプルをidxとdtにアンパック代入して使用しているわけです。
そのため、enumerateを使ったfor文の実行では、以下のようにタプルとして要素を受け取って処理をすることも可能です。
data = ["A", "B", "C", "D", "E"] # enumerateの返却値をtupleで受け取る for tpl in enumerate(data): print(f"idx: {tpl[0]}, dt: {tpl[1]}")
【実行結果】 idx: 0, dt: A idx: 1, dt: B idx: 2, dt: C idx: 3, dt: D idx: 4, dt: E
上記例のように取り出したタプルの0番目がインデックス番号になっていて、1番目が値となっています。
enumerateで任意のインデックス番号から繰り返し(ループ)を開始する方法
上記で紹介してきたenumerateの基本的な使い方ではインデックス番号は0番から開始します。インデックスの番号を任意の番号から開始したい場合は、以下のように開始数値を引数に指定することで実現できます。
data = ["A", "B", "C", "D", "E"] # enumerateのインデックス番号の開始数値を指定する for idx, dt in enumerate(data, 5): print(f"idx: {idx}, dt: {dt}")
【実行結果】 idx: 5, dt: A idx: 6, dt: B idx: 7, dt: C idx: 8, dt: D idx: 9, dt: E
上記例では、開始数値を5に指定しています。このように開始数値を指定することで、指定数値からインデックス番号をとることが可能になります。
enumerateの公式ドキュメントはこちらを参照してください。
まとめ
Pythonにおけるenumerateを用いたfor文の使い方について解説しました。
enumerateは、引数にリストなどのデータを指定することで「インデックス番号」と「値」の組み合わせを取得しつつfor文で使用することができます。
なお、インデックス番号と値をそれぞれ取得して使う場合とタプル(tuple)として受け取って使う方法があります。また、インデックス番号の開始位置を任意に指定できることも紹介しました。
処理している要素が何番目の要素かが必要となるfor文の繰り返し(ループ)処理ではenumerateを使用して対応するようにしてください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。