Pythonのenumerate関数の実際の処理内容や、for文のなかでの使い方をパターン分けをし、実例を用いてわかりやすく解説しています。
enumerate関数とは?
enumerate関数は指定した配列の値のインデックス番号を取得する関数です。単体でも使えますが、基本的にはfor文の中で使用することが多いです。
なお、enumerateは「列挙する。数えていく」という意味です。ここでは、インデックス番号を一つずつ列挙してい意味になります。
要素を取り出すのはenumerateなしでもできるので、インデックス番号が欲しいときに使います。
enumarate関数自体の使い方は以下のようになります。
enumerate(配列, 初期値)
- 第一引数は、配列以外でもiterableな要素を渡せます。
- 初期値は、数値のみを記載します。start=n でも記述できます。
array = ['AAA', 'BBB', 'CCC', 'DDD']
print(list(enumerate(array)))
#[(0, 'AAA'), (1, 'BBB'), (2, 'CCC'), (3, 'DDD')]
print(list(enumerate(array, start=4)))
#[(4, 'AAA'), (5, 'BBB'), (6, 'CCC'), (7, 'DDD')]
print(list(enumerate(array, 4)))
#[(4, 'AAA'), (5, 'BBB'), (6, 'CCC'), (7, 'DDD')]
▼enumerateの処理の中身
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
以下でfor文の中におけるenumerate関数の使い方を、パターン分けして解説します。
for文の中でのenumerate関数の使い方
基本構文は以下になります。
for a, b in enumerate(A, n):
└「a」:インデックス番号を入れる変数
└「b」:要素を入れる変数
└「A」:配列(またはタプル)
└「n」:インデックス番号の初期値
出力結果をみるために、printメソッドを使うことが多いです。
インデックス番号と要素を取り出す(変数1個)
for a in enumerate(A):
└ 変数を1個(ここではa)だけ指定
▼出力
(インデックス番号, 要素)変数1個
list = ["AAA","BBB","CCC","DDD"]
for a in enumerate(list):
print(a)
#出力結果
(0, 'AAA')
(1, 'BBB')
(2, 'CCC')
(3, 'DDD')
もちろん変数は任意です。iでもAAAでも問題ありません。
インデックス番号と要素を別々に取り出す
インデックス番号のみ取り出す
インデックス番号のみ取り出したい場合は、1番目に指定した変数のみを使います。
for a,b in enumerate(A):
└ 「a」:インデックス番号が入る変数
└ 「b」:要素が入る変数
└ 「A」:配列(またはタプル)
list = ["AAA","BBB","CCC","DDD"]
for a,b in enumerate(list):
print(a)
#出力結果
0
1
2
3
▼変数1個で0番目の要素を指定する方法でも取得できます。
・a = (インデックス番号,要素)
・a[0] = インデックス番号インデックス番号のみ取り出す(変数1個)
list = ["AAA","BBB","CCC","DDD"]
for a in enumerate(list):
print(a[0])
#出力結果
0
1
2
3
値のみ取り出す
enumerateを使っているときに、値のみ取り出したい場合は、2番目に指定した変数のみを使います。
for a,b in enumerate(A):
└ 「a」:インデックス番号が入る変数
└ 「b」:要素が入る変数
└ 「A」:配列(またはタプル)
list = ["AAA","BBB","CCC","DDD"]
for a,b in enumerate(list):
print(b)
#出力結果
AAA
BBB
CCC
DDD
▼変数1個で1番目の要素を指定する方法でも取得できる。
・a = (インデックス番号,要素)
・a[1] = インデックス番号インデックス番号のみ取り出す(変数1個)
list = ["AAA","BBB","CCC","DDD"]
for a in enumerate(list):
print(a[1])
#出力結果
AAA
BBB
CCC
DDD
両方取り出す
インデックス番号と値の両方を取り出したい場合は、1番目の変数がインデックス番号、2番目の変数が値になります。
for a,b in enumerate(A):
└ 「a」:インデックス番号が入る変数
└ 「b」:要素が入る変数
└ 「A」:配列(またはタプル)
list = ["AAA","BBB","CCC","DDD"]
for a,b in enumerate(list):
print(a,b)
#出力結果
0 AAA
1 BBB
2 CCC
3 DDD
▼formatメソッドを使った出力例
list = ["AAA","BBB","CCC","DDD"]
for a,b in enumerate(list):
print("index番号={:^4}要素={:^8}".format(a,b))
#出力結果
index番号= 0 要素= AAA
index番号= 1 要素= BBB
index番号= 2 要素= CCC
index番号= 3 要素= DDD
formatメソッドの使い方はこちら
インデックス番号の初期値を変更する
enumarate関数のインデックス番号はデフォルトでは0始まりですが、初期値に好きな値を指定することができます。
for a, b in enumerate(A, n):
└「a」:インデックス番号を入れる変数
└「b」:要素を入れる変数
└「A」:配列(またはタプル)
└「n」:インデックス番号の初期値(整数)
「n」に入れた任意の整数が初期値になります。
変数が1つの場合
list = ["AAA","BBB","CCC","DDD"]
for a in enumerate(list, 999):
print(a)
#出力結果
(999, 'AAA')
(1000, 'BBB')
(1001, 'CCC')
(1002, 'DDD')
変数が2つの場合
list = ["AAA","BBB","CCC","DDD"]
for a, b in enumerate(list, 999):
print(a)
#出力結果
999
1000
1001
1002
初期値はマイナスも指定できます
list = ["AAA","BBB","CCC","DDD"]
for a, b in enumerate(list, -2):
print(a)
#出力結果
-2
-1
0
1
少数(float)はエラーになります
list = ["AAA","BBB","CCC","DDD"]
for a, b in enumerate(list, 999.9):
print(a)
#出力結果
# TypeError: 'float' object cannot be interpreted as an integer
タプルに使う
配列(list)に使うことが一般的ですが、タプル(tuple)に使うこともできます。
(参考)【Python】タプル(tuple)とは何か?もうエラーにしない!配列との違いやタプルにしない方法や使い方を実例でわかりやすく解説
tuple = "AAA","BBB","CCC","DDD"
type(tuple)
#出力: tuple
for a in enumerate(tuple):
print(a)
#出力結果
(0, 'AAA')
(1, 'BBB')
(2, 'CCC')
(3, 'DDD')
タプル以外でも文字列などiterable形式、すなわち、for文で回せる要素であればenumerateが使えます。