言語バージョン 3.9.0

公開日 2020年12月10日 JST

更新日 2020年12月19日 JST

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

enumerate

このページでは豊富な例を用いてPythonのenumerate関数の使い方を学ぶことができます。

enumerate関数は、引数で与えた情報を元にして生成したenumerateオブジェクトを戻り値(返り値)として返します。
enumerateオブジェクトはカウント値(デフォルト値は0から)と引数で与えた反復可能(iterable)なオブジェクトのバリューのペアを 反復可能なオブジェクトの長さ分だけ生成します。

第1引数には反復可能なオブジェクトを指定します。
第2引数は任意ですが、整数を指定することによりカウントを始める値を設定することができます。

TL;DR

基本

# 第1引数に反復可能(iterable)なオブジェクトを取る
tuple1 = ('python', 'javascript')
enumerate1 = enumerate(tuple1)
print(enumerate1)
==> <enumerate object at {オブジェクト識別値}>
print(type(enumerate1))
==> <class 'enumerate'>
# enumerateオブジェクトの要素を得る方法
for element in enumerate1:
    # 要素の型はtuple型
    print(element, type(element))
==> (0, 'python') <class 'tuple'>
==> (1, 'javascript') <class 'tuple'>




# リスト型の場合
list1 = [100, 200, 300]
enumerate2 = enumerate(list1)
# iとeに要素の値を代入
for (i, e) in enumerate2:
    print(i, e, sep=':')
==> 0:100
==> 1:200
==> 2:300




# str型の場合
string1 = 'ABC'
enumerate0 = enumerate(string1)
for i, e in enumerate0:
    print(i, e, sep=':')
==> 0:A
==> 1:B
==> 2:C




# 辞書型の場合
dict1 = {'id': 1, 'name': 'Adam', 'is_engineer': True}
enumerate3 = enumerate(dict1.items())
for i, e in enumerate3:
    print(i, e, sep=':')
==> 0:('id', 1)
==> 1:('name', 'Adam')
==> 2:('is_engineer', True)




# forと併用して反復可能なオブジェクトの要素のインデックスを得る
list2 = ['Python', 'JavaScript', 'Java', 'Golang']
for index, element in enumerate(list2):
    print(f'list2[{index}] = {element}')
==> list2[0] = Python
==> list2[1] = JavaScript
==> list2[2] = Java
==> list2[3] = Golang

関連情報:forの使用方法

関連情報:type(組み込み関数)の使用方法

第2引数の指定

# enumerateの第2引数でカウントの始まる値を指定できる
tuple1 = ('py', 'js', 'ts', 'go')
# 100からカウントを始める
enumerate1 = enumerate(tuple1, 100)
for e in enumerate1:
    print(e)
# 0からではなく100からカウントが始まっている
==> (100, 'py')
==> (101, 'js')
==> (102, 'ts')
==> (103, 'go')




list1 = [100, 200, 300]
# 1からカウントを始める
for i, e in enumerate(list1, 1):
    print(i, e, sep=':')
==> 1:100
==> 2:200
==> 3:300

解説

基本

enumerate関数は引数に反復可能なオブジェクトを指定することで、引数で指定した値からenumerateオブジェクトを生成することができます。

enumerateオブジェクトは引数で与えたオブジェクトのバリューとカウント値(デフォルト値は0)のペアを生成します。
各要素はペアの値を設定した1つのタプルオブジェクト(tuple)です。 このタプルオブジェクトとカウント値がデフォルトで0から始まることを利用し、 for文で繰り返し処理を実行したいオブジェクトの各要素のインデックス値を取得する場合 に多く利用されます。

また、enumerateオブジェクトはイテレータオブジェクトであり、 for文を使用せずともnext関数を使用することで各要素にアクセスすることができます。

list1 = ['Apple', 'Banana', 'Kiwi']
enumerate1 = enumerate(list1)
print(enumerate1)
==> <enumerate object at {オブジェクト識別値}>
print(type(enumerate1))
==> <class 'enumerate'>
# enumerateオブジェクトの要素を取得する
for e in enumerate1:
    # 要素の型はtuple型
    print(e, type(e))
==> (0, 'Apple') <class 'tuple'>
==> (1, 'Banana') <class 'tuple'>
==> (2, 'Kiwi') <class 'tuple'>




# enumerateオブジェクトはイテレーターであるのでnextを使用できる
tuple1 = ('Apple', 'Banana', 'Kiwi')
enumerate2 = enumerate(tuple1)
while True:
    try:
        print(next(enumerate2))
    except StopIteration:
        print('---')
        break
==> (0, 'Apple')
==> (1, 'Banana')
==> (2, 'Kiwi')
==> ---




list2 = [1000, 2000, 3000]
for i, e in enumerate(list2):
    print(f'list2[{i}] = {e}')
==> list2[0] = 1000
==> list2[1] = 2000
==> list2[2] = 3000

関連情報:whileの使用方法

関連情報:forの使用方法

関連情報:type(組み込み関数)の使用方法

第2引数の指定

任意の第2引数にはカウント値がどの整数から始まるかを指定することができます。
第2引数を指定しない場合はデフォルト値である0がカウントの始まりの値となります。

list1 = ['python', 'javascript', 'typescript']
enumerate1 = enumerate(list1, 5)
for count, element in enumerate1:
    print(count, element, sep=':')
==> 5:python
==> 6:javascript
==> 7:typescript




dict1 = {'id': 1, 'name': 'Olivia'}
for i, e in enumerate(dict1.items(), 9999):
    print(i, e, sep=':')
==> 9999:('id', 1)
==> 10000:('name', 'Olivia')

1次情報

enumerate(組み込み関数) - Pythonドキュメント