【Python】enumerate関数とは?使い方まとめ|インデックス番号と要素を取り出す方法をわかりやすく解説

python-how-to-use-enumerate-function Python
記事内に広告が含まれていることがあります。
[PR]

Pythonのenumerate関数の実際の処理内容や、for文のなかでの使い方をパターン分けをし、実例を用いてわかりやすく解説しています。

enumerate関数とは?

enumerate関数は指定した配列の値のインデックス番号を取得する関数です。単体でも使えますが、基本的にはfor文の中で使用することが多いです。

なお、enumerateは「列挙する。数えていく」という意味です。ここでは、インデックス番号を一つずつ列挙してい意味になります。

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

(参考)Python公式 enumerate

以下でfor文の中におけるenumerate関数の使い方を、パターン分けして解説します。

for文の中でのenumerate関数の使い方

基本構文は以下になります。

for a, b in enumerate(A, n):
 └「a」:インデックス番号を入れる変数
 └「b」:要素を入れる変数
 └「A」:配列(またはタプル)
 └「n」:インデックス番号の初期値

出力結果をみるために、printメソッドを使うことが多いです。

ポイント

・変数を2つ定義する
 └ インデックス番号を入れる変数
 └ 要素を入れる変数

・変数は1つでもOK
 └ インデックス番号と要素がセットになる
 └ 出力:(インデックス番号, 要素)

・インデックス番号の初期値を任意設定できる
 └ デフォルトは0始まり
 └ 整数のみ(マイナスも指定できる)


インデックス番号と要素を取り出す(変数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が使えます。

タイトルとURLをコピーしました