「パイソン 2番目に大きい値」
「Python max関数 2番目に大きい」
「python max 上からn番目の値を取得 関数」
といった検索キーワードでのアクセスが、割とあります。
n番目に大きい値を、Pythonで取得するにはどうすればいいのか、探していらしたのでしょう。
n番目に大きい値を取得するサンプルコード
ExcelのLARGE関数のようなメソッドを持つライブラリーもありそうですが、並べ替えを行えばn番目の値を取得できます。
sorted(nums)[-2]
上記のコードをIDLEのShellウィンドウで実行すると、2番目に大きな「4」が出力されます。
つづけて
sorted(nums)[-3]
を実行すれば3番目に大きな「3」が出力されます。
もちろん
sorted(nums)[-1]
を実行した場合はmax()関数と同じく「5」が出力されます。
sorted関数は並べ替えを行う
Pythonのsorted関数は昇順で並べ替えを行い、新たなリストを返す関数です。
例えば、
nums = [5, 1, 3, 2, 4]
sorted(nums)
を実行すると
[1, 2, 3, 4, 5]
が出力されます。
2番目に大きい値を取得するということは、このリストの後ろから2つ目を取得するということですから、
sorted(nums)[-2]
と、インデックス「-2」を指定します。
時間計算量
Pythonの公式ドキュメント「ソート HOW TO」には、「Python では Timsort アルゴリズムが利用されていて」との記述がありますから、時間計算量はO(n log n)と考えられます。
setオブジェクトを使ってn番目に大きい値を取得する
元の数値が、
nums = [5, 5, 1, 2, 3]
のとき、上記の
sorted(nums)[-2]
では「5」が返されます。
「2番目に大きい」の定義次第ですが、このリストで「3」を取得したいのならば、
sorted(set(nums))[-2]
です。
set関数を使うと、重複しない要素を持つsetオブジェクトを取得できます。
例えば、
nums = [5, 5, 1, 2, 3]
set(nums)
を実行すると、
{5, 1, 2, 3}
が出力されます。
これを先ほどと同じくsorted関数を使って昇順で並べ替え、
sorted(set(nums))[-2]
後ろから2番目を取得しているのが、
sorted(set(nums))[-2]
です。
最終更新日時:2020-10-23 16:19