Python, enumerateの使い方: リストの要素とインデックスを取得
Pythonのenumerate()
関数を使うと、forループの中でリストやタプルなどのイテラブルオブジェクトの要素と同時にインデックス番号(カウント、順番)を取得できる。インデックスは任意の値から開始可能。
目次
本記事のサンプルコードでは以下のリストを例として使う。
l = ['Alice', 'Bob', 'Charlie']
source: enumerate_start.py
forループについての詳細や、enumerate()
とzip()
の併用については以下の記事を参照。
forループでインデックスを取得できるenumerate()関数
通常のforループ
for name in l:
print(name)
# Alice
# Bob
# Charlie
source: enumerate_start.py
enumerate()関数を使ったforループ
enumerate()
関数の引数にリストなどのイテラブルオブジェクトを指定する。
インデックス番号, 要素
の順に取得できる。
for i, name in enumerate(l):
print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie
source: enumerate_start.py
enumerate()関数のインデックスを1(0以外の値)から開始
上の例のように、デフォルトだとenumerate()
関数のインデックスは0から始まる。
0以外の数値から開始したい場合は、enumerate()
関数の第二引数に任意の開始数値を指定する。
1からはじめる場合。
for i, name in enumerate(l, 1):
print(i, name)
# 1 Alice
# 2 Bob
# 3 Charlie
source: enumerate_start.py
もちろん他の数字からでもOK。
for i, name in enumerate(l, 42):
print(i, name)
# 42 Alice
# 43 Bob
# 44 Charlie
source: enumerate_start.py
連番の文字列を作りたい場合に便利。1から始めるためにi+1
にしたりするよりはenumerate()
関数の第二引数で開始数値を指定したほうがスマート。
for i, name in enumerate(l, 1):
print(f'{i:03}_{name}')
# 001_Alice
# 002_Bob
# 003_Charlie
source: enumerate_start.py
数値のゼロ埋めをしたりするときに使うf文字列については以下の記事参照。
増分(step)を指定
enumerate()
関数に増分step
を指定する引数はないが、以下のようにすると実現可能。
step = 3
for i, name in enumerate(l):
print(i * step, name)
# 0 Alice
# 3 Bob
# 6 Charlie
source: enumerate_start.py