Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最低給与と最高給与を除いた平均給与を求めるプログラムの作成方法

問題の概要

各要素が重複しない整数型の配列 salary があるとします。salary[i] は i 番目の従業員の給与を表しています。ここで求めたいのは、最低給与と最高給与を除外した場合の平均給与です。

例えば、入力が salary = [8000, 6000, 2000, 8500, 2500, 4000] の場合を考えてみましょう。このとき、最低値は 2000、最高値は 8500 なので、これらを除いた [8000, 6000, 2500, 4000] の平均を計算します。

計算式は次のようになります。

(8000 + 6000 + 2500 + 4000) / 4 = 5125.0

解決のアプローチ

この問題は、以下のシンプルな手順で解くことができます。

  • リストから最小値(最低給与)を削除する
  • リストから最大値(最高給与)を削除する
  • 残りの要素の合計を要素数で割り、その結果を返す

Pythonでの実装例

それでは、実際のコードを見てみましょう。

def solve(salary):
    salary.remove(min(salary))
    salary.remove(max(salary))
    return sum(salary) / len(salary)

salary = [8000, 6000, 2000, 8500, 2500, 4000]
print(solve(salary))

入力

[8000, 6000, 2000, 8500, 2500, 4000]

出力

5125.0

補足:元のリストを保持したい場合の別解

上記の実装では remove() を使っているため、元のリスト自体が変更されてしまいます。元のデータを保持しておきたい場合は、sorted() を使ってソート後のリストの両端をスライスで除外する方法が便利です。

def solve(salary):
    trimmed = sorted(salary)[1:-1]
    return sum(trimmed) / len(trimmed)

こちらの方法なら元のリストはそのまま残り、処理も1行でまとまります。計算量はどちらの方法でもリストのサイズ n に対して十分高速に動作します。

  1. Pythonで二分木の各レベルの最大幅を求めるプログラム

    二分木が与えられたとき、ツリー内の任意のレベルにおける最大幅を求めることを考えます。ここでいう「レベルの幅」とは、そのレベルにおいて最も左端にあるノードと最も右端にあるノードの間に含まれるノード数のことです。例えば、次のような二分木が入力として与えられた場合を考えてみましょう。この場合、出力は 2 となります。解決のための手順この問題を解くために、以下の手順に従います。各深さにおける位置の最小値と最大値を保持するマップ d を作成します。初期値は、最小値を無限大(∞)、最大値を 0 とします。関数 dfs() を定義します。この関数は引数として root、pos := 0、depth := 0

  2. Pythonでリスト内の最大値・最小値の位置を見つける方法

    Pythonでは、リスト内の最大値や最小値を求めるのが非常に簡単で、それらの位置(インデックス)も簡単に取得できます。Pythonには便利な組み込み関数が用意されており、min()はリスト内の最小値を求め、max()はリスト内の最大値を求めます。さらに、index()を使えば特定の要素のインデックス(位置)を調べることができます。 アルゴリズム maxminposition(A, n) /* Aはユーザーが入力したリスト、nはリストのサイズ */ ステップ1:組み込み関数を使って最小要素の位置を求める A.index(min(A)) ステップ2:組み込み関数を使って最