indexが振られていない時に活用できるenumerate関数
enumerate関数を効果的に利用できる場面はどのようなときかを考えていたところ、ちょうど競技プログラミングで以下のような課題が出題されたので、まさに使いどころだと思った。
問題
学生のテストと欠席回数のデータが学籍番号順に与えられたとき、成績が合格点以上になっている学生の学籍番号を順に出力するプログラムを作成してください。学籍番号は 1 から順に与えられます。
学生の成績はテストの点数から 欠席回数 × 5 点 を引いた点数とする
入力値
N M
a_1 b_1
a_2 b_2
a_3 b_3
…
N:学生の人数
M:合格最低点
a_n:テストの得点
b_n:欠席回数
enumerate関数を利用してindexを取得する
もしかしたら他にも良い方法があるかもしれないが、enumerate関数を活用して回答を出力してみる。
enumerate関数を使うと、forループの中でリストの要素とインデックスが同時に取得できる。
# man:学生の人数、score:最低合格点
# まずはmapによりそれぞれの数値を入力値から取得する。
man , score = map(int , input().split())
# 空のリストを準備
li = []
# リストへmapにて取得した要素(得点と欠席回数の要素を持つペア)をループで追加する
for i in range(man):
li.append(list(map(int , input().split())))
# enumerate関数を用いて、取得したリストのindex(学籍番号)と同時にリストの要素を取得
# 要素の中の数値を計算することで、分岐によりindexを出力する
for num , scr in enumerate(li):
if (scr[0] - scr[1]*5) >= score:
print(num + 1)
elif ((scr[0] - scr[1]*5) < score) and score == 0:
print(num + 1)