どうも!リョクちゃです。
今回は、enumerate関数について紹介をしていきます。
enumerateは、”数え上げる”や”並べ立てる”といった意味をもっています。
これら意味の通り、数え上げてくれる役割があります。
リストやタプルと組み合わせることで大きな効果を発揮できます。
それでは以下、例を交えて紹介していきます。
ちなみに前回のPython勉強会の記事はこちら、
目次
enumerate関数の書き方
enumerate関数は下のように書くことができます。
よく使われる書き方が下のようなコードになります。
1 2 3 |
for 変数1, 変数2 in enumerate(配列変数): print(変数1) print(変数2) |
enumerate関数は、配列変数のインデックスと要素を返してくれる関数になります。
よって、上記のコードではそれぞれ変数1には、配列変数のインデックスが
変数2には配列変数の要素がそれぞれ代入されます。
たとえば、下のようなコードがあります。
これを実行すると、配列変数のインデックスと要素がそれぞれprint関数で出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
lstTest = ['りんご', 'ばなな', 'ぶどう', 'たまご', 'ベーコン'] for i, j in enumerate(lstTest): print('インデックス : {0}'.format(i)) print('要素 : {0}'.format(j)) # 出力 # インデックス : 0 # 要素 : りんご # インデックス : 1 # 要素 : ばなな # インデックス : 2 # 要素 : ぶどう # インデックス : 3 # 要素 : たまご # インデックス : 4 # 要素 : ベーコン |
応用例 : enumerate関数
プログラムコンテストなどでは、enumerate関数を使って解ける問題があります。
たとえば、入力値として整数a,bと文字列sがそれぞれ与えられます。
文字列sを整数aからbの範囲の文字を大文字にして出力をしてください。
これは文字列の部分範囲選択についてコードが書けるかどうかといった問題になります。
ここで入力値の整数a,bを2,6、文字列sにThis program is Pythonが与えられます。
文字列sのa番目からb番目までにある値を大文字にしてくださいといった問題に対して、
コードを書いていくと、下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
a, b = input().rstrip().split() s = input() rec = "" for i, j in enumerate(s): if i >= (int(a) - 1) and i <= (int(b) - 1): rec += j.upper() else: rec += j print(rec) # 入力値 # 2 6 # This program is Python # 出力 # THIS Program is Python |
このように書くことができます。
イメージで表すと下のようになります。
ここで気を付けてください。
Pythonでは、文字列のインデックスは0から開始になりますが、
問題では、これについては考慮されていないのでコードを書く側が
理解していないといけないので気を付けましょう。
これにより、処理をする際にそれぞれインデックスを+1して、
上記のコードでは処理をさせています。
コードの流れ
まず、for文を使ってenumerate関数で取得されたインデックスと値について、
それぞれ処理をしていきます。
→ enumerate(s) : 文字列sのインデックスと値がそれぞれ取得されます。
for i, j in enumerate(s) の
- i がインデックス
- j が値
になります。
for文下のif文条件式には、文字列sのインデックスが入力値a以上b未満であれば、
その値を大文字にし、それ以外であれば何もしないようにしています。
変数recはすべての結果を連結して保持してくれている役割を持ちます。
全ての処理が終わって、print関数で変数recに代入された値を出力しています。
まとめ
enumerate関数は、配列変数を引数に渡すことで(インデックス、値)の形式で返してくれる。
処理の際に、インデックスをそのまま利用することも可能。
実はrange関数と比べて、コードがクリアになり、
理解しやすくなるといった利点もあります。
ご覧いただきありがとうございます。
・こちらの書籍を参考にPythonの理解を深めました。