Python入門から応用までの学習サイト


最小値・最大値の取得 (min / max)

Pythonでは特定の値や要素の中から最小値最大値を取得する方法としてminmax関数があります。

引数には反復可能オブジェクトや個々の値を渡します。

# -*- coding:utf-8 -*-


print min([10, 20, 30, 20, 5, 3])
print min('Z', 'A', 'J', 'W')

--実行結果--

3
A

数値の最小値である「3」が、文字列の最小値(アルファベット順)である「'A'」がそれぞれの結果となります。



引数はminと同じですが、逆の結果(最大値)が返ります。

# -*- coding:utf-8 -*-


print max([10, 20, 30, 20, 5, 3])
print max('Z', 'A', 'J', 'W')

--実行結果--

30
Z

数値の最大値である「30」が、文字列の最大値(アルファベット順)である「'Z'」がそれぞれの結果となります。



min、max関数にはキーワード引数として「key」を設定することができます。 これはソート時に利用される順序付けの関数を指定することができ、たとえば次のような形で利用することができます。

# -*- coding:utf-8 -*-


def key_func(n):
    return int(n)


l = [2, 3, 4, '111']

print min(l, key=key_func)
print max(l, key=key_func)

--実行結果--

2
111

上記の例では数値と文字列が混在しているリストから最小値、最大値を取得しています。その際、各要素は関数内の処理により数値へ変換してから最小値、最大値を求めます。文字列へ変換した場合はそれぞれの結果も異なります。

# -*- coding:utf-8 -*-


def key_func(n):
    return str(n)


l = [2, 3, 4, '111']

print min(l, key=key_func)
print max(l, key=key_func)

--実行結果--

111
4

なお例示コードの関数内の処理は、値を数値、文字列へ変換するだけの単純なものです。次のようなコードでもまったく同じ処理内容を行うことができます。

# -*- coding:utf-8 -*-


l = [2, 3, 4, '111']

print min(l, key=int)
print max(l, key=int)

print min(l, key=str)
print max(l, key=str)



利用方法としては次のような形の方が多いでしょう。下記コードは「code」「name」「score」を持つタプルのリストから「score」で最小のもの、最大のものを取得しています。

# -*- coding:utf-8 -*-


def key_func(n):
    return n[2]


# code / name / score
l = [(1, 'Python', 100), (2, 'Ruby', 80), (3, 'Perl', 40)]

print min(l, key=key_func)
print max(l, key=key_func)

--実行結果--

(3, 'Perl', 40)
(1, 'Python', 100)

クラス内の「score」属性で最小値、最大値を求める場合は次のようにします。

# -*- coding:utf-8 -*-


def key_func(n):
    return n.score


class TestClass:

    def __init__(self, code, name, score):
        self.code = code
        self.name = name
        self.score = score

    def __str__(self):
        return '({}, {}, {})'.format(self.code, self.name, self.score)


l = [
    TestClass(1, 'Python', 100),
    TestClass(2, 'Ruby', 80),
    TestClass(3, 'Perl', 40)
]

print min(l, key=key_func)
print max(l, key=key_func)

--実行結果--

(3, Perl, 40)
(1, Python, 100)

このようにkeyとして指定する関数は短い処理になりがちです。そういった場合はlambda式を用いるのも良いでしょう。




Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

最小値・最大値があれば合計値もある!



確かな力が身につく
Python「超」入門




P  R