enumerate()は、シーケンス(リストやタプル、文字列)や辞書などの各要素にインデックスを付与して、新しいイテラブルを生成するPythonの標準組込み関数です。
これを使うと、例えばforループにおいてリストの各要素とインデックスを同時に取得することができます。
本記事では、この関数の使い方について具体例を挙げてまとめます。
enumerate()の使い方
書式は以下です。
enumerate(iterable, start=0)
enumerateオブジェクトを返します。各引数は下記の通り。
- iterable:シーケンス(リスト、タプル、文字列)や辞書、その他イテレータオブジェクト
- start:インデックスの開始値(デフォルトはstart=0)
※公式リファレンス:enumerage()
具体例を以下に示します。
(返り値はenmumerateオブジェクトとなるのでlist()でリスト化しています。)
>>> l = ["a", "b", "c"]
# インデックスが付与された新しいイテラブル
>>> list(enumerate(l))
[(0, 'a'), (1, 'b'), (2, 'c')]
# 返り値はenumerateオブジェクトです。
>>> enumerate(l)
<enumerate object at 0x7fcee8786960>
enumerate()を使わない場合とのコード比較
enumerate()を使う場合/使わない場合のコードを比較します。
enumerate()を使わない場合
この場合は、インデックスを表す変数(★部)を追加に定義します。
>>> l = ["a", "b", "c"]
>>> i = 0 ★インデックスを表す変数
>>> for v in l:
... print(i, v)
... i += 1
...
0 a
1 b
2 c
enumerate()を使った方法
enumerate()を使うと、余計な変数を設定する必要がなく、簡単に書くことが出来ます。
>>> l = ["a", "b", "c"]
>>> for i, v in enumerate(l):
... print(i, v)
...
0 a
1 b
2 c
リスト以外のイテレータオブジェクトの具体例
リスト以外にも使えます。
タプルの例
>>> t = ("a", "b", "c")
>>> for i, v in enumerate(t):
... print(i, v)
...
0 a
1 b
2 c
文字列の例
>>> s = "abc"
>>> for i, v in enumerate(s):
... print(i, v)
...
0 a
1 b
2 c
辞書の例
- Keyとインデックスを同時に取得
>>> d = {'a':9, 'b':8, 'c':7}
>>> for i, v in enumerate(d):
... print(i, v)
...
0 a
1 b
2 c
- Valueとインデックスを同時に取得
>>> for i, v in enumerate(d.values()):
... print(i, v)
...
0 9
1 8
2 7
- (Key, Value)ペアとインデックスを同時に取得
>>> for i, v in enumerate(d.items()):
... print(i, v)
...
0 ('a', 9)
1 ('b', 8)
2 ('c', 7)
インデックスの開始値を指定
第二引数startを使ってインデックスの開始値を任意に指定することが出来ます。
以下は、インデックスを1から開始する例です。(start = 1を指定)
>>> for i, v in enumerate(l, start=1):
... print(i, v)
...
1 a
2 b
3 c
確認した環境
- OS: Ubuntu20.04LTS
- Python3.11.2
まとめ
- Pythonの標準組込み関数のenumerate()は、シーケンス(リストやタプル、文字列等)や辞書の要素とインデックスを同時に取得することが出来ます。
- 余分な変数を省く事ができコードを簡略化出来ます。