🐍 Python

enumerate(iterable, start=0)

forループでリストの要素を回しながら、同時にインデックス(何番目か)も取り出せるようにする関数です。「要素と位置の両方が欲しい」という場面で、range(len(...))を使うより簡潔で安全に書けます。

構文: enumerate(iterable, start=0)
戻り値: (インデックス, 要素) のペアを順に返すイテレータ

基本の使い方

fruits = ["apple", "banana", "cherry"]
for i, f in enumerate(fruits):
    print(i, f)
# 0 apple
# 1 banana
# 2 cherry

startでインデックスの開始番号を変える

人間向けの表示で「1番目、2番目...」のように1から数えたい場合に便利です。

for i, f in enumerate(fruits, start=1):
    print(i, f)
# 1 apple
# 2 banana
# 3 cherry

range(len())との比較

enumerateが無い場合、同じことはrange(len(...))で書けますが、要素を取り出すのにfruits[i]という添字アクセスが別途必要になり、書き間違いの元になります。

for i in range(len(fruits)):
    print(i, fruits[i])
# 0 apple
# 1 banana
# 2 cherry(結果はenumerateと同じだが、書き方が冗長)
パラメータ
iterable
ループ対象のリストなど
start(省略可)
インデックスの開始番号。省略時は0
💡 AIコードレビュー観点:range(len(...))が使われていたらenumerateへの書き換えを検討

AIが生成したコードでfor i in range(len(lst)):のあとにlst[i]で要素を取り出している箇所を見かけたら、enumerate(lst)に書き換えられないか検討する価値があります。添字を打ち間違える(lst[i]をlst[i-1]と書いてしまう等)リスクが減り、読みやすさも上がります。ただし「要素は不要でインデックスだけ欲しい」場合はrange(len(lst))のままで問題ありません。

複数のリストを同時に処理したい場合はzipのページを参照してください。

← Python list クイックリファレンス一覧へ戻る