スコアの辞書から各学生の平均点を求めるPythonプログラム
学生の点数が辞書形式で与えられているとします。キーには学生の名前、値には数値のリスト(各教科の点数)が格納されています。このとき、各学生の平均点を求める必要があります。
例えば、入力が scores = {'Amal': [25, 36, 47, 45], 'Bimal': [85, 74, 69, 47], 'Tarun': [65, 35, 87, 14], 'Akash': [74, 12, 36, 75]} のような場合、出力は [38.25, 68.75, 50.25, 49.25] となります。つまり、38.25 が Amal の平均点、68.75 が Bimal の平均点、という具合です。
解決の手順
この問題を解くには、以下の手順に従います。
- avg_scores として新しい空の辞書を作成する
- scores 辞書内の各名前(name)について、scores[name] のリストに含まれる点数の平均値を avg_scores[name] に代入する
- avg_scores のすべての値をリストとして返す
実装例
理解を深めるために、次の実装例を見てみましょう。
def solve(scores):
avg_scores = dict()
for name in scores:
avg_scores[name] = sum(scores[name]) / len(scores[name])
return list(avg_scores.values())
scores = {'Amal': [25, 36, 47, 45], 'Bimal': [85, 74, 69, 47],
'Tarun': [65, 35, 87, 14], 'Akash': [74, 12, 36, 75]}
print(solve(scores))
コードの解説
このプログラムでは、Pythonの組み込み関数 sum() を使って各学生の点数の合計を計算し、len() でリストの要素数(教科の数)を取得することで平均点を算出しています。forループで辞書のキー(学生名)を順番に処理し、計算結果を新しい辞書 avg_scores に格納していきます。最後に values() メソッドですべての平均点を取り出し、list() でリスト化して返します。
入力
{'Amal': [25, 36, 47, 45], 'Bimal': [85, 74, 69, 47], 'Tarun': [65, 35, 87, 14], 'Akash': [74, 12, 36, 75]}
出力
[38.25, 68.75, 50.25, 49.25]
-
Pythonで全ての有効なパスの中から最大スコアを見つけるプログラム
2つの配列 nums1 と nums2 が与えられているとします。「有効なパス」は次のように定義されます。nums1 または nums2 のいずれかを選択し、インデックス0から走査を開始する。配列を左から右へ向かって進む。移動中に、nums1 と nums2 の両方に存在する共通の値に出会った場合は、その時点でパスをもう一方の配列へ切り替えることができます。スコアとは、有効なパス上の一意な値の合計のことです。ここでの課題は、考えられるすべての有効なパスの中から得られる最大スコアを求めることです。答えが大きすぎる場合は、結果を 10^9+7 で割った余りを返してください。たとえば、入力が num
-
PythonでリストからN個の最大要素を取得する方法
整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):