[Python] リストの最大値、最小値とそのインデックスを取得する(max, min, index)

Python リスト 組込み型 組込み関数

プログラムの中で

  • リストの最大値や最小値を取得したい!
  • 最大値(最小値)を取る要素のインデックスを取得したい!
  • 最大値が複数あるんだけど、全部のインデックスが知りたい!

こんな場合は、標準組み込み関数のmax()、min()およびindex()を使うと実現できます。
特に、最大値(最小値)が複数ある場合は少し注意が必要ですので、このあたりも含めて、基本的な使い方についてまとめます。
# 2019/5/4 記事更新

確認した環境

  • OS: Ubuntu 16.04LTS
  • Python3.7.2@Anaconda

リストの最大値、最小値を取得

リスト内の最大値、最小値を取得するには、max()関数, min()関数を使います。
使い方は以下の通りです。
※max()を例にしますが最小値の場合は、上記のmaxをminに読み替えてください。

max(iterable, *[, key, default]) または max(arg1, arg2, *args[, key])
  • 引数が一つの場合は、それはiterable(リストやタプル)である必要があり、その中で最大値を返します。
  • キーワード無しの位置引数が2つ以上場合(arg1, arg2,…)は、その位置引数の中で最大値が返されます。

例を以下に示します。

# 引数が1つの場合は、その要素の最大値が返却されます
>>> max('1234')
'4'
>>> max('apple')
'p'
>>> num_list = [1, 3, 5, 2]
>>> max(num_list)
5

# 引数が2つ以上の場合は、大きい方の引数が返却されます
>>> max('1234', '1235')
'1235'
>>> max('apple', 'orange')
'orange'

第二引数にkeyパラメータを指定すると、値の比較を行う際の関数を設定できます。
例えば、以下のようにkey=str.lowerを指定すると、文字列を全て小文字に変換した上で比較が行われます。

>>> max('apple', 'Orange')
'apple'
>>> max('apple', 'Orange', key = str.lower)
'Orange'

尚、最大値が複数ある場合は一番最初(左)のものが返されます。

>>> l = [1, 3, 5, 2, 5]
>>> max(l)
5

最大値、最小値のインデックスを取得する

max()とindex()を組み合わせると、最大値をとる要素のインデックスを取得できます。

最初に見つかった最大値のインデックスを取得する

一番最初(左)に見つかった最大値の要素のインデックスが返ります。

>>> l = [1, 3, 5, 2, 5]

# 最大値のインデックス
>>> l.index(max(l))
2

enumerate()関数とmax()関数のkeyパラメータを組み合わせて、以下のような書き方もあります。

>>> l = [1, 3, 5, 2, 5]
>>> max(enumerate(l), key = lambda x:x[1])[0]
2

# 参考
>>> max(enumerate(l), key = lambda x:x[1])
(2, 5)

enumerate()についてはこちらの記事でもまとめていますので、ご参照ください。
[Python] enumerate()の使い方(インデックス付きforループ)

最大値が複数ある場合のインデックスを全て取得

最大値が複数ある場合で、すべてのインデックスを取得したい場合は、リスト内包を使って以下のように書けます。

>>> l = [1, 3, 5, 2, 5]

# 複数の最大値のインデックスを全て取得
>>> [i for i, v in enumerate(l) if v == max(l)]
[2, 4]

リスト内包表記についてはこちらの記事でもまとめていますので、ご参照ください。
[Python] リストの生成方法(リスト内包表記の使い方)

まとめ

今回は、リストの最大値/最小値と、そのインデックスの求め方についてまとめました。

  • max()、min()を使ってリストの最大値、最小値を求める方法
  • 最大値、最小値のインデックスについて、
    • index()を使った方法
    • max()のkeyパラメータを使う方法
    • enumerate()とリスト内包表記を組み合わせる方法
  •  

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project