どうも、ちょげ(@chogetarou)です。
配列(array)の2番目の最大値を取得する方法を紹介します。
リストの場合

リスト(List)の2番目に大きい値を取得する方法は、2つあります。
sorted()
ひとつは、sorted()を使う方法です。
まず、対象のリストをSetに変換します。
sorted()を呼び出し、引数にSetを指定します。
そして、sorted()の結果のインデックス「-2」にアクセスします。
#ls=対象のリスト
new_ls = set(ls)
result = sorted(new_ls)[-2] #2番目に大きい値を取得
上記のsorted()のインデックス「-2」にアクセスすることで、リストの2番目に大きい値を取得できます。
使用例
nums = [10, 3, 5, 8, 4]
new_ls = set(nums)
result = sorted(new_ls)[-2]
print(result)
出力:
8
max()
もうひとつは、max()を使う方法です。
まず、対象のリストから新しいSetを生成します。
次に、Setからremove()を呼び出します。
remove()の引数でmax()を呼び出し、max()の引数にSetを指定します。
そして、max()を呼び出し、引数にSetを指定します。
#ls=対象のリスト
new_ls = set(ls)
new_ls.remove(max(new_ls))
result = max(new_ls) #2番目に大きい値を取得
上記のmax()は、リストの2番目に大きい値を取得します。
使用例
nums = [10, 3, 5, 8, 4]
new_nums = set(nums)
new_nums.remove(max(new_nums))
result = max(new_nums)
print(result)
出力:
8
Numpy配列の場合

Numpy配列(array)で2番目に大きい値を取得するには、partition()を使います。
まず、numpyからpartition()を呼び出します。
partition()の第1引数にnumpyから呼び出したunique()、第2引数に「-2」を指定します。
unique()の引数に、Numpy配列から呼び出したflatten()の結果を指定します。
そして、partition()の結果のインデックス「-2」にアクセスします。
#arr=対象のNumpy配列
result = np.partition(np.unique(arr.flatten(), -2)[-2] #2番目に大きい値を取得
上記のpartition()のインデックス「-2」にアクセスすることで、Numpy配列の2番目に大きい値を取得できます。
使用例
import numpy as np
nums = np.array([[10, 3, 1, 5, 8], [1, 7, 1, 2, 9]])
result = np.partition(np.unique(nums.flatten()), -2)[-2]
print(result)
出力:
9
まとめ
リスト(List)の2番目に大きい値を取得する方法は、次の2つです。
- sorted()を使う方法
new_ls = set(ls)
result = sorted(new_ls)[-2]
- max()を使う方法
new_ls = set(ls)
new_ls.remove(max(new_ls))
result = max(new_ls)
Numpy配列の2番目に大きい値を取得するには、partition()を使います。
#arr=対象のNumpy配列
result = np.partition(np.unique(arr.flatten(), -2)[-2] #2番目に大きい値を取得
コメント