晴耕雨読

working in the fields on fine days and reading books on rainy days

[Python] RubyのEnumerable#each_with_indexを自作する

Python で Ruby の Enumerable#each_with_index を行う方法について説明します。

組み込み関数 enumerate を使う

配列をループで順番にアクセスするときに、そのインデックスも使いたいときがあります。

members = ['Alice', 'Carol', 'Bob', 'Dave']

i = 0
for member in members:
    print("{}: {}".format(i, member))
    i += 1

インデックスをカウントするために変数 i を定義する方法もありますが、 代わりに、enumerate という組み込み関数を使って、変数 i のスコープを小さくすることができます。

members = ['Alice', 'Carol', 'Bob', 'Dave']

for i, member in enumerate(members):
    print("{}: {}".format(i, member))

余談

enumerate はジェネレータ関数であり、次のコードと等価です。

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1

以上です。

See Also

Python3 library functions enumerate