max関数でPythonのオブジェクト内要素の最大値を取得のイメージ画像

max関数でPythonのオブジェクト内要素の最大値を取得

  • 公開日:2018/09/30
  • 更新日:2018/10/27
  • 投稿者:n bit

Pythonの組み込み関数『max関数』について解説。max関数を使えばオブジェクト内の要素で最大値を持つ要素の値を求めることができます。max関数の使い方やその特性等について詳しく見ていきましょう。

  • Python

この記事は約 分で読めます。(文字)

max関数とは

max関数はPythonの組み込み関数の1つでリストやタプル、辞書、セット、文字列といった複数の要素を持つオブジェクト内で最大値を持つ要素の値を求めることができる関数です。

max関数の主な用途

  • オブジェクト内の要素で最大値を持つ要素の値を取得

前回max関数とは逆の働きをするmin関数について学習しました。max関数の動きと見比べてみることで理解が深まると思います。

min関数がしっかりと理解できている方はその逆と覚えておけば充分でしょう。

max関数の使い方

max関数の使い方は複数の要素の中から最大値を持つ要素の値を求めたいオブジェクトを引数として渡します。

max(複数の要素の中から最大値を持つ要素の値を求めたいオブジェクト)

実際にmax関数を使って様々なオブジェクト内の最大値を持つ要素の値を取得してみましょう。最初は利用頻度の高いデータ型『リスト』です。

list型(リスト)オブジェクト内の最大値を持つ要素の値をmax関数で取得

リストを代入した変数をmax関数の引数に渡して返される値をチェックしてみます。返された値を出力させるためprint関数等に渡してください。

x = [30, 20, 10, 40]

print(max(x))

出力結果

40
リストオブジェクト内の最大値を持つ要素値は40のため『40』と表示されました。

同じようにその他のデータ型もチェックしてみましょう。

tuple型(タプル)オブジェクト内の最大値を持つ要素の値をmax関数で取得

タプルを代入した変数をmax関数の引数に渡して返される値をチェックしてみます。

x = (30, 20, 10, 40)

print(max(x))

出力結果

40
タプルオブジェクト内の最大値を持つ要素値は40のため『40』と表示されました。

dict型(辞書)オブジェクト内の最大値を持つ要素の値をmax関数で取得

辞書を代入した変数をmax関数の引数に渡して返される値をチェックしてみます。

x = {'b':20, 'c':30, 'a':10, 'd':40}

print(max(x))

出力結果

d
辞書オブジェクト内の最大値を持つ要素値はaのため『d』と表示されました。結果からわかるように辞書オブジェクトは辞書内のkeyを基準として最大値を取得しています。

辞書内のvalueを基準として最大値を取得したい場合は変数名の後に『.values()』を付け足すことで変更できます。

x = {'b':20, 'c':30, 'a':10, 'd':40}

print(max(x.values()))

出力結果

40
辞書オブジェクト内のvalueで最大値を持つ要素値は40のため『40』と表示されました。

まだ学習していませんがその他にもmax関数で扱えるデータ型があります。それらも紹介しておきましょう。

set型(セット)オブジェクト内の最大値を持つ要素の値をmax関数で取得

セットを代入した変数をmax関数の引数に渡して返される値をチェックしてみます。

x = {30, 20, 10, 40}

print(max(x))

出力結果

40
セットオブジェクト内の最大値を持つ要素値は40のため『40』と表示されました。

frozenset型(セット)オブジェクト内の最大値を持つ要素の値をmax関数で取得

frozensetを代入した変数をmax関数の引数に渡して返される値をチェックしてみます。

x = frozenset({30, 20, 10, 40})

print(max(x))

出力結果

40
frozensetオブジェクト内の最大値を持つ要素値は40のため『40』と表示されました。

rangeオブジェクト内の最大値を持つ要素の値をmax関数で取得

rangeを代入した変数をmax関数の引数に渡して返される値をチェックしてみます。

x = range(2, 10, 2)

print(max(x))

出力結果

8
rangeオブジェクト内の最大値を持つ要素値は8のため『8』と表示されました。

str型(文字列)オブジェクト内の最大値をmax関数で取得

文字列を代入した変数をmax関数の引数に渡して返される値をチェックしてみましょう。

x = 'cba'

print(max(x))

出力結果

a
『a』と表示されました。文字列はアルファベット順に並べてa〜zに向けて値が大きくなります。そのため最大値を求めた時、“a”、“b”、“c”、の中では“c”が最大値となるため結果に『c』が返されました。

先ほどは小文字のみの文字列でしたが大文字と小文字が混ざった場合は小文字の方をより最大値として認識します。

x = 'cbaBCA'

print(max(x))

出力結果

c

小文字のため『c』が表示されています。

list型(リスト)オブジェクト内の文字列で最大値を持つ要素の値をmax関数で取得

max関数はリストオブジェクトが要素として複数持つ単語(文字列)の最大値を判定する場合1文字目の文字で判定を行い、同じ1文字目を持つ単語が複数ある場合はさらに2文字目を使って判定します。

x = ['apple', 'Apple', 'amazon', 'Amazon', 'windows', 'Windows', 'walmart', 'Walmart']

print(max(x))

出力結果

windows

オブジェクト内の要素で1文字目が最大値となるのは小文字のwを持つ'windows'と'walmart'です。次に2文字目で判定を行った場合『a』よりも『i』が大きな値となりますので『windows』と表示されました。

アルファベット、記号、数値、ダブルバイト文字が入り混じった文字列に対するmax関数の処理

その他、記号や数値、ダブルバイト文字などが混じってきた場合、max関数はどうなるのか気になる方もいるかもしれません。実はこれらの判定はUnicodeに準拠して行われておりアルファベット以外に記号や数値、ダブルバイト文字が入り混じっても最大値を判定することができます。

全く同じ最大の値を持つ要素が複数ある場合のmax関数の処理

もし全く同じ最大の値を持っている要素が複数あった場合は最初に表示されたものを結果として返します。

x = [30, 20, 10, 40, 30, 20, 10, 40]

print(max(x))

出力結果

40
リストオブジェクト内の最大値を持つ要素値は40。同じ値を持つ要素が2つあるのため最初に出現した『40』が表示されています。

max関数の引数にkeyとなる関数を渡して最大値の基準を変更

max関数は引数にkeyとなる関数を指定することができます。引数にkeyを指定した場合はkeyの関数を基準にして最大値を求めるよう変更されます。

参考例としてkeyにlen関数を指定した動作を見てみましょう。len関数はオブジェクトのサイズ(長さ)を測る関数でしたね。

つまりlen関数をkeyに指定することでオブジェクト内の各要素の長さが最も長いものを求めるように処理が変更されます。

x = ['apple', 'Apple', 'amazon', 'Amazon', 'windows', 'Windows', 'walmart', 'Walmart']

print(max(x, key=len)))

出力結果

windows
リストオブジェクト内の文字列で最も文字数が多いのは7文字の'windows'、'Windows'、'walmart'、'Walmart'。同じ値を持つ要素が4つあるのため最初に出現した『windows』が表示されています。

今日のdot

『max関数』はUnicodeに基づいてリスト、タプル、辞書、セット等の複数の要素を持つオブジェクト内で最大の値を持つ要素値を取得します。

引数にkey関数を指定することで最大を求めるための基準を変更できます。覚えておくと2段階の処理を1度に行えますので便利です。