Home » Python » Pythonでn番目に大きい値を取得する

Pythonでn番目に大きい値を取得する

動作検証バージョン:Windows 10 + Python 3.7.3

「パイソン 2番目に大きい値」
「Python max関数 2番目に大きい」
「python max 上からn番目の値を取得 関数」
といった検索キーワードでのアクセスが、割とあります。

n番目に大きい値を、Pythonで取得するにはどうすればいいのか、探していらしたのでしょう。

[スポンサードリンク]

n番目に大きい値を取得するサンプルコード

ExcelのLARGE関数のようなメソッドを持つライブラリーもありそうですが、並べ替えを行えばn番目の値を取得できます。

nums = [5, 1, 3, 2, 4]
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

[スポンサードリンク]

Home » Python » Pythonでn番目に大きい値を取得する

「Python」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.