こんにちは、かつコーチです。
リストをループしながら「今何番目の要素か」を知りたい場面はよくあります。
range(len(リスト))を使って何とか書いている方もいるのではないでしょうか。
この記事では、range(len())との比較を交えながら、enumerate()の基本構文とstart引数の使い方を解説します。
読み終える頃には、インデックス付きループをすっきり書けるようになります。
enumerate()の基本構文
range(len())で書く方法とその問題点
インデックスと要素の両方を使いたいとき、初心者がまず思いつくのはrange(len())を使う書き方です。
fruits = ["りんご", "バナナ", "みかん"]
for i in range(len(fruits)):
print(i, fruits[i])
実行結果は次の通りです。
0 りんご
1 バナナ
2 みかん
この書き方は動きますが、fruits[i]のようにリストへ毎回インデックスでアクセスする必要があり、コードがやや読みにくくなります。
enumerate()を使ったシンプルな書き方
enumerate()は、リストなどをループしながら、インデックスと要素を同時に取り出せる組み込み関数です。
fruits = ["りんご", "バナナ", "みかん"]
for i, fruit in enumerate(fruits):
print(i, fruit)
実行結果は次の通りです。
0 りんご
1 バナナ
2 みかん
range(len())を使う書き方と比べて、fruits[i]のようなインデックスアクセスが不要になり、コードがすっきりします。
Pythonの公式ドキュメントでも、リストの要素とインデックスを同時に扱いたい場合はenumerate()が推奨されています。
start引数で開始番号を変える
enumerate()は、デフォルトでは0から数え始めます。
しかし、画面に表示する順位や番号のように「1から数えたい」場面もよくあります。
そんなときはstart引数を使います。
fruits = ["りんご", "バナナ", "みかん"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}番目: {fruit}")
実行結果は次の通りです。
1番目: りんご
2番目: バナナ
3番目: みかん
start引数に好きな数値を指定すれば、その番号からカウントを開始できます。
よくあるつまずきポイント・エラー対処
enumerate()の戻り値をそのままprintしてしまう
これは筆者が初心者に教えているときによく見かけるつまずきです。
enumerate()の戻り値を、for i, fruitのように分けずにそのまま扱おうとして混乱してしまうケースです。
❌ Before(分割せずに使おうとする書き方)
fruits = ["りんご", "バナナ", "みかん"]
for item in enumerate(fruits):
print(item[1])
実行すると、意図通りには動くものの、次のような読みにくいコードになります。
りんご
バナナ
みかん
一見動いているように見えますが、item[0]がインデックス、item[1]が要素だと覚えておかないと読み解けません。
筆者自身、他人が書いたこのようなコードを読んだときに、一瞬「itemの中身は何だっけ」と手が止まってしまった経験があります。
✅ After(分割して受け取る書き方)
enumerate()はタプルを返すので、for文の変数を2つに分けて受け取るのが基本です。
fruits = ["りんご", "バナナ", "みかん"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
実行結果は次の通りです。
0: りんご
1: バナナ
2: みかん
indexとfruitのように意味のある変数名で分けて受け取ることで、コードが読みやすくなり、後から見返したときにも理解しやすくなります。
まとめ
この記事のポイント
range(len())よりenumerate()の方がシンプルにインデックス付きループを書けるenumerate()はインデックスと要素をタプルで返すfor i, item in enumerate(リスト)のように分割して受け取るのが基本start引数で、カウントを開始する番号を変更できる- 表示用の番号など、1から数えたい場面では
start=1が便利
次に読むべき記事
- zip()で複数のリストをまとめて処理する
- リスト内包表記の書き方と使いどころ
- sorted()とsort()でリストを並び替える
タグ: Python, 初心者向け, 基本文法