[Python]配列の2番目に大きい値を取得するには?

python

どうも、ちょげ(@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番目に大きい値を取得できます。

リストをSetに変換しないと、最大値を持つ要素が複数存在する場合に、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配列の場合

インターフェース, インターネット, プログラム, ブラウザ, Www

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番目に大きい値を取得

コメント

タイトルとURLをコピーしました