プログラムの中で
- リストの最大値や最小値を取得したい!
- 最大値(最小値)を取る要素のインデックスを取得したい!
- 最大値が複数あるんだけど、全部のインデックスが知りたい!
こんな場合は、標準組み込み関数の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)
最大値が複数ある場合のインデックスを全て取得
最大値が複数ある場合で、すべてのインデックスを取得したい場合は、リスト内包を使って以下のように書けます。
>>> l = [1, 3, 5, 2, 5]
# 複数の最大値のインデックスを全て取得
>>> [i for i, v in enumerate(l) if v == max(l)]
[2, 4]
まとめ
今回は、リストの最大値/最小値と、そのインデックスの求め方についてまとめました。
- max()、min()を使ってリストの最大値、最小値を求める方法
- 最大値、最小値のインデックスについて、
- index()を使った方法
- max()のkeyパラメータを使う方法
- enumerate()とリスト内包表記を組み合わせる方法
[Python] enumerate()の使い方(インデックス付きforループ)