Python, enumerateの使い方: リストの要素とインデックスを取得

Modified: | Tags: Python, リスト

Pythonのenumerate()関数を使うと、forループの中でリストやタプルなどのイテラブルオブジェクトの要素と同時にインデックス番号(カウント、順番)を取得できる。インデックスは任意の値から開始可能。

本記事のサンプルコードでは以下のリストを例として使う。

l = ['Alice', 'Bob', 'Charlie']

forループについての詳細や、enumerate()zip()の併用については以下の記事を参照。

forループでインデックスを取得できるenumerate()関数

通常のforループ

for name in l:
    print(name)
# Alice
# Bob
# Charlie

enumerate()関数を使ったforループ

enumerate()関数の引数にリストなどのイテラブルオブジェクトを指定する。

インデックス番号, 要素の順に取得できる。

for i, name in enumerate(l):
    print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie

enumerate()関数のインデックスを1(0以外の値)から開始

上の例のように、デフォルトだとenumerate()関数のインデックスは0から始まる。

0以外の数値から開始したい場合は、enumerate()関数の第二引数に任意の開始数値を指定する。

1からはじめる場合。

for i, name in enumerate(l, 1):
    print(i, name)
# 1 Alice
# 2 Bob
# 3 Charlie

もちろん他の数字からでもOK。

for i, name in enumerate(l, 42):
    print(i, name)
# 42 Alice
# 43 Bob
# 44 Charlie

連番の文字列を作りたい場合に便利。1から始めるためにi+1にしたりするよりはenumerate()関数の第二引数で開始数値を指定したほうがスマート。

for i, name in enumerate(l, 1):
    print(f'{i:03}_{name}')
# 001_Alice
# 002_Bob
# 003_Charlie

数値のゼロ埋めをしたりするときに使うf文字列については以下の記事参照。

増分(step)を指定

enumerate()関数に増分stepを指定する引数はないが、以下のようにすると実現可能。

step = 3
for i, name in enumerate(l):
    print(i * step, name)
# 0 Alice
# 3 Bob
# 6 Charlie

関連カテゴリー

関連記事