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

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

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