Pythonのリストから最大値と最小値を求める方法を解説しています。
1. 最大値を求める|max()関数
max()関数は、引数に渡したリストの要素の最大値を返すものです。
1.1. 数値リストの最大値を求める
以下のコードでは、リストに格納されている5つの数値のうちの最大値である4が返ってきています。
nums = [1, 2.2, 3, 4, -5]
max(nums)
1.2. 複数の数値リストの最大値を求める
引数には複数のリストを渡すことができます。その場合は、リスト内の数値の合計値が大きい方のリストをそのまま返します。
nums1 = [53, 71, 28, 52, 86] # 合計290
nums2 = [26, 72, 11, 98, 23] # 合計230
max(nums1, nums2)
もし、複数の数値リストの合計値ではなく、もっとも大きな数値を含むリストを知りたいなら、オプション引数で「key=max」と指定します。以下のコードでは、先ほどと違って、二つのリストの中で最大値である98を含むリストを返していますね。
max(nums1, nums2, key=max)
ここで使っている「key=○○」は「キー引数」というものです。「○○」の部分に関数名を書くことで、その関数を最大値の判定基準として処理されます。
max()関数の引数に複数のリストを渡した場合、デフォルト(key引数を指定しない状態)では、「最大値=合計値が大きい」という判定基準になるため、合計値が最も大きいリストを出力します。これはデフォルトでは合計値を基準にデータを返す「key=sum」となっているからです。
これを「key=max」と書くと、最大値の判定基準が「複数のリストのうち最も大きな数値を含むもの」に変わるため、最大値を含むリストを返します。
関数を自作すると様々な基準で処理を行えるようになります。関数の作り方については、以下の記事で解説しています。
1.3. 複数のリストの中から最大値だけを取り出す
もし、全てのリストの中で最大値を取り出したいなら、先ほどの出力結果に対してもう一度max()関数をかけます。
max(max(nums1, nums2, key=max))
3つ以上のリストでもやり方は同じです。リストは何個でも渡すことができます。
nums1 = [53, 71, 28, 52, 86]
nums2 = [26, 72, 11, 98, 23]
nums3 = [13, 46, 29, 99, 33]
max(max(nums1, nums2, nums3, key=max))
「key=max」を指定しない場合は、合計値がもっとも大きいリストの中の最大値を返します。
max(max(nums1, nums2, nums3))
1.4. 文字列リストの最大値を求める
文字列リストの場合、ひらがなやカタカナは、先頭の文字を基準に、あいうえお順・アイウエオ順で後ろの文字ほど大きい文字としてみなされます。例えば、以下の文字列リストの中では「お」が最大値です。
hiragana = ['え', 'う', 'い', 'お', 'あ']
max(hiragana)
アルファベットの場合は、abc順で後ろのものほど大きい文字としてみなされます。さらに、大文字と小文字なら、小文字の方が大きい文字としてみなされます。
alphabets = ['b', 'C', 'a', 'Z', 'x']
max(alphabets)
この基準は、「Pythonのリストの要素をソートする」で解説しているソートの降順法則と同じです。
複数タイプの文字が混在する場合は、小さい方から「アルファベット順→かな順→カナ順」という法則です。
1.5. 複数の文字列リストの最大値を求める
max()関数の引数に複数の文字列リストを渡した場合は、先ほどの「アルファベット順→かな順→カナ順」で後ろのものを含むリストほど大きいとみなされます。
以下のコードでは、「お」よりも「く」の方が大きいので、「く」を含むリストがそのまま返されます。
hiragana1 = ['あ', 'い', 'う', 'え', 'お']
hiragana2 = ['か', 'き', 'く']
max(hiragana1, hiragana2)
key引数を指定することで、最大値の判定基準を変えることができます。以下のコードでは「key=len」としているので、「最大値=要素数が大きい方」という判定基準になっています。len()関数については「Pythonのリストの要素数(長さ)を取得する方法」をご確認ください。
max(hiragana1, hiragana2, key=len)
2. 最小値を求める|min()関数
min()関数は、引数に渡したリストの最小値を返すものです。max()関数と全く同じ使い方で、判定基準が真逆になったものです。
2.1. 数値リストの最小値を求める
min()関数に数値リストを渡すと、その中の最小値を返します。
nums = [1, 2.2, 3, 4, -5]
min(nums)
2.2. 複数のリストの最小値を求める
引数に複数のリストを渡した場合は、合計が小さい方のリストをそのまま返します。
nums1 = [53, 71, 11, 52, 86] # 合計273
nums2 = [26, 72, 28, 98, 23] # 合計247
min(nums1, nums2)
複数のリストの中で、最小の数値を含むリストが欲しい場合は、key引数で「key=min」と指定します。
min(nums1, nums2, key=min)
このようにmin()関数でもmax()関数と同様に、key引数の「key=○○」の「○○」の部分に任意の関数を指定することで、最小値の判定基準を変えることができます。
関数を自作すると様々な基準で処理を行えるようになります。関数の作り方については、以下の記事で解説しています。
2.3. 複数のリストの中の最小値だけを求める
複数のリストの中から最小値だけを求めたい場合は、上のコードに、さらにmin()関数を二度がけします。
min(min(nums1, nums2, key=min))
普通に二度がけをすれば、合計値が小さい方のリストの中の最小値を求めることができます。
min(min(nums1, nums2))
2.4. 文字列リストの最小値を求める
文字列リストの場合は、先頭の文字を基準に、最小値の順から、あいうえお順・アイウエオ順で判定されます。
以下のコードのように、「あいうえお」の中の最小値は「あ」です。
hiragana = ['え', 'う', 'い', 'お', 'あ']
min(hiragana)
アルファベットは、小さい方から「大文字ABC順→小文字abc順」です。
以下のコードでは、この基準から「C」が最小値です。
alphabets = ['b', 'C', 'a', 'Z', 'x']
min(alphabets)
複数タイプの文字が混在する場合は、小さい方から「アルファベット順→かな順→カナ順」という法則です。
2.5. 複数の文字列リストの最小値を求める
複数のリストをmin()関数の引数に渡した場合、最小の文字を含むリストをそのまま返します。
hiragana1 = ['あ', 'い', 'う', 'え', 'お']
hiragana2 = ['か', 'き', 'く']
min(hiragana1, hiragana2)
要素数が最小のリストを取得したい場合は、「key=len」で、最小値の判定基準を要素数が少ないものに変えます。
min(hiragana1, hiragana2, key=len)
3. まとめ
max()関数は、引数に渡したイテラブル(リスト)の最大値を求める関数です。min()関数は、最小値を求める関数です。それぞれ使い方は全く同じで、真逆の結果を出力します。
単体の数値リストの場合は、値を基準に最大値、最小値を返します。
複数の数値リストを渡した場合は、デフォルトでは合計値を基準に最大、最小のリストをそのまま返します。
最大値最小値の判定基準を変えたい時はkey引数で指定します。
文字列の場合は、「大文字ABC順→小文字abc順→かな順→カナ順」 で大きくなっていきます。
まずはこうした、最大値、最小値の判定基準を理解しておきましょう。
その上で、関数の理解を深めてkey引数を指定したり、二度がけができるようになると、リストをより自由に操ることができるようになります。
コメント
コメント一覧 (1件)
key=int の解説が無かった。
リスト内の数値がクオートで囲まれている場合、このオプションがないと困る。