Pythonのリストの最大値・最小値を取得する

Pythonのリストから最大値と最小値を求める方法を解説しています。

目次

1. 最大値を求める|max()関数

max()関数は、引数に渡したリストの要素の最大値を返すものです。

1.1. 数値リストの最大値を求める

以下のコードでは、リストに格納されている5つの数値のうちの最大値である4が返ってきています。

In [1]:
nums = [1, 2.2, 3, 4, -5]
max(nums)
Out[1]:
4

1.2. 複数の数値リストの最大値を求める

引数には複数のリストを渡すことができます。その場合は、リスト内の数値の合計値が大きい方のリストをそのまま返します。

In [2]:
nums1 = [53, 71, 28, 52, 86]  # 合計290
nums2 = [26, 72, 11, 98, 23]  # 合計230
max(nums1, nums2)
Out[2]:
[53, 71, 28, 52, 86]

もし、複数の数値リストの合計値ではなく、もっとも大きな数値を含むリストを知りたいなら、オプション引数で「key=max」と指定します。以下のコードでは、先ほどと違って、二つのリストの中で最大値である98を含むリストを返していますね。

In [3]:
max(nums1, nums2, key=max)
Out[3]:
[26, 72, 11, 98, 23]

ここで使っている「key=○○」は「キー引数」というものです。「○○」の部分に関数名を書くことで、その関数を最大値の判定基準として処理されます。

max()関数の引数に複数のリストを渡した場合、デフォルト(key引数を指定しない状態)では、「最大値=合計値が大きい」という判定基準になるため、合計値が最も大きいリストを出力します。これはデフォルトでは合計値を基準にデータを返す「key=sum」となっているからです。

これを「key=max」と書くと、最大値の判定基準が「複数のリストのうち最も大きな数値を含むもの」に変わるため、最大値を含むリストを返します。

関数を自作すると様々な基準で処理を行えるようになります。関数の作り方については、以下の記事で解説しています。

1.3. 複数のリストの中から最大値だけを取り出す

もし、全てのリストの中で最大値を取り出したいなら、先ほどの出力結果に対してもう一度max()関数をかけます。

In [4]:
max(max(nums1, nums2, key=max))
Out[4]:
98

3つ以上のリストでもやり方は同じです。リストは何個でも渡すことができます。

In [5]:
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))
Out[1]:
99

「key=max」を指定しない場合は、合計値がもっとも大きいリストの中の最大値を返します。

In [6]:
max(max(nums1, nums2, nums3))
Out[3]:
86

1.4. 文字列リストの最大値を求める

文字列リストの場合、ひらがなやカタカナは、先頭の文字を基準に、あいうえお順・アイウエオ順で後ろの文字ほど大きい文字としてみなされます。例えば、以下の文字列リストの中では「お」が最大値です。

In [1]:
hiragana = ['え', 'う', 'い', 'お', 'あ']
max(hiragana)
Out[1]:
'お'

アルファベットの場合は、abc順で後ろのものほど大きい文字としてみなされます。さらに、大文字と小文字なら、小文字の方が大きい文字としてみなされます。

In [2]:
alphabets =  ['b', 'C', 'a', 'Z', 'x']
max(alphabets)
Out[2]:
'x'

この基準は、「Pythonのリストの要素をソートする」で解説しているソートの降順法則と同じです。

複数タイプの文字が混在する場合は、小さい方から「アルファベット順→かな順→カナ順」という法則です。

1.5. 複数の文字列リストの最大値を求める

max()関数の引数に複数の文字列リストを渡した場合は、先ほどの「アルファベット順→かな順→カナ順」で後ろのものを含むリストほど大きいとみなされます。

以下のコードでは、「お」よりも「く」の方が大きいので、「く」を含むリストがそのまま返されます。

In [3]:
hiragana1 = ['あ', 'い', 'う', 'え', 'お']
hiragana2 = ['か', 'き', 'く']
max(hiragana1, hiragana2)
Out[3]:
['か', 'き', 'く']

key引数を指定することで、最大値の判定基準を変えることができます。以下のコードでは「key=len」としているので、「最大値=要素数が大きい方」という判定基準になっています。len()関数については「Pythonのリストの要素数(長さ)を取得する方法」をご確認ください。

In [4]:
max(hiragana1, hiragana2, key=len)
Out[4]:
['あ', 'い', 'う', 'え', 'お']

2.  最小値を求める|min()関数

min()関数は、引数に渡したリストの最小値を返すものです。max()関数と全く同じ使い方で、判定基準が真逆になったものです。

2.1. 数値リストの最小値を求める

min()関数に数値リストを渡すと、その中の最小値を返します。

In [1]:
nums = [1, 2.2, 3, 4, -5]
min(nums)
Out[1]:
-5

2.2. 複数のリストの最小値を求める

引数に複数のリストを渡した場合は、合計が小さい方のリストをそのまま返します。

In [2]:
nums1 = [53, 71, 11, 52, 86]  # 合計273
nums2 = [26, 72, 28, 98, 23]  # 合計247
min(nums1, nums2)
Out[2]:
[26, 72, 28, 98, 23]

複数のリストの中で、最小の数値を含むリストが欲しい場合は、key引数で「key=min」と指定します。

In [3]:
min(nums1, nums2, key=min)
Out[3]:
[53, 71, 11, 52, 86]

このようにmin()関数でもmax()関数と同様に、key引数の「key=○○」の「○○」の部分に任意の関数を指定することで、最小値の判定基準を変えることができます。

関数を自作すると様々な基準で処理を行えるようになります。関数の作り方については、以下の記事で解説しています。

2.3. 複数のリストの中の最小値だけを求める

複数のリストの中から最小値だけを求めたい場合は、上のコードに、さらにmin()関数を二度がけします。

In [4]:
min(min(nums1, nums2, key=min))
Out[4]:
11

普通に二度がけをすれば、合計値が小さい方のリストの中の最小値を求めることができます。

In [5]:
min(min(nums1, nums2))
Out[5]:
23

2.4. 文字列リストの最小値を求める

文字列リストの場合は、先頭の文字を基準に、最小値の順から、あいうえお順・アイウエオ順で判定されます。

以下のコードのように、「あいうえお」の中の最小値は「あ」です。

In [1]:
hiragana = ['え', 'う', 'い', 'お', 'あ']
min(hiragana)
Out[1]:
'あ'

アルファベットは、小さい方から「大文字ABC順→小文字abc順」です。

以下のコードでは、この基準から「C」が最小値です。

In [2]:
alphabets =  ['b', 'C', 'a', 'Z', 'x']
min(alphabets)
Out[2]:
'C'

複数タイプの文字が混在する場合は、小さい方から「アルファベット順→かな順→カナ順」という法則です。

2.5. 複数の文字列リストの最小値を求める

複数のリストをmin()関数の引数に渡した場合、最小の文字を含むリストをそのまま返します。

In [3]:
hiragana1 = ['あ', 'い', 'う', 'え', 'お']
hiragana2 = ['か', 'き', 'く']
min(hiragana1, hiragana2)
Out[3]:
['あ', 'い', 'う', 'え', 'お']

要素数が最小のリストを取得したい場合は、「key=len」で、最小値の判定基準を要素数が少ないものに変えます。

In [4]:
min(hiragana1, hiragana2, key=len)
Out[4]:
['か', 'き', 'く']

3. まとめ

max()関数は、引数に渡したイテラブル(リスト)の最大値を求める関数です。min()関数は、最小値を求める関数です。それぞれ使い方は全く同じで、真逆の結果を出力します。

単体の数値リストの場合は、値を基準に最大値、最小値を返します。

複数の数値リストを渡した場合は、デフォルトでは合計値を基準に最大、最小のリストをそのまま返します。

最大値最小値の判定基準を変えたい時はkey引数で指定します。

文字列の場合は、「大文字ABC順→小文字abc順→かな順→カナ順」 で大きくなっていきます。

まずはこうした、最大値、最小値の判定基準を理解しておきましょう。

その上で、関数の理解を深めてkey引数を指定したり、二度がけができるようになると、リストをより自由に操ることができるようになります。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

  • key=int の解説が無かった。
    リスト内の数値がクオートで囲まれている場合、このオプションがないと困る。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる