このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】min関数とmax関数

min関数とmax関数

 min関数とmax関数は、Pythonにおいてイテラブル内の最小値と最大値を素早く取得するための非常に便利なビルトイン関数です。これらの関数は、数値はもちろん、文字列やその他のデータ型にも適用でき、例えば文字列の場合は辞書順(アルファベット順)で比較されます。
 また、key引数にラムダ式を指定することで、比較の基準をカスタマイズすることも可能です。ここでは、基本的な使い方とラムダ式を組み合わせた応用例を、わかりやすいコード例や表を交えながら解説していきます。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.min関数とmax関数の基本的な使い方

1.1. 基本的な適用例

 ここでは、動物名のリストを例にとり、min関数とmax関数を使って辞書順に最小・最大の要素を取得する方法を紹介します。以下のプログラムは、動物の名前が格納されたリストから、辞書順で最も早い(最小)ものと、最も遅い(最大)ものを抽出しています。

サンプルプログラム

# 動物のリストを定義
animals = ['zebra', 'monkey', 'elephant', 'giraffe', 'lion']

# 元のリストを表示
print("動物リスト:", animals)
# 出力例: 動物リスト: ['zebra', 'monkey', 'elephant', 'giraffe', 'lion']

# 辞書順で最小の要素を取得
smallest_animal = min(animals)
print("辞書順で最小の動物:", smallest_animal)
# 出力例: 辞書順で最小の動物: elephant

# 辞書順で最大の要素を取得
largest_animal = max(animals)
print("辞書順で最大の動物:", largest_animal)
# 出力例: 辞書順で最大の動物: zebra

実行結果

動物リスト: ['zebra', 'monkey', 'elephant', 'giraffe', 'lion']
辞書順で最小の動物: elephant
辞書順で最大の動物: zebra

解説

  • 最初に、animalsリストに5種類の動物名を格納しています。
  • min(animals)はリスト内の要素を辞書順に比較し、最も先頭に来る要素(この例では「elephant」)を返します。
  • 同様に、max(animals)は最も後方に位置する要素(「zebra」)を返します。

1.2. 辞書順や数値の比較

 min関数とmax関数は、リスト内の要素が文字列の場合は辞書順で、数値の場合は大小関係に従って比較されます。以下の表は、基本的な操作とその結果をまとめたものです。

操作コード例結果例
リストの定義animals = ['zebra', 'monkey', 'elephant', 'giraffe', 'lion']['zebra', 'monkey', 'elephant', 'giraffe', 'lion']
最小値の取得min(animals)'elephant' (辞書順で最小)
最大値の取得max(animals)'zebra' (辞書順で最大)

また、数値のリストに対しては以下のように動作します。

サンプルプログラム

# 数値のリストを定義
numbers = [42, 17, 68, 3, 99]

print("数値リスト:", numbers)
# 出力例: 数値リスト: [42, 17, 68, 3, 99]

print("最小の数値:", min(numbers))
# 出力例: 最小の数値: 3

print("最大の数値:", max(numbers))
# 出力例: 最大の数値: 99

実行結果

数値リスト: [42, 17, 68, 3, 99]
最小の数値: 3
最大の数値: 99

2.ラムダ式との組み合わせによる高度な比較

2.1. key引数を使ったカスタム比較

 min関数とmax関数は、key引数を用いることで、各要素から比較に使用する値を抽出することが可能です。たとえば、辞書で表現された人物情報のリストから年齢を基準に最も若い人と最も年上の人を取得する例を見てみましょう。

サンプルプログラム

# 人物情報が格納されたリストを定義
people = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

# 年齢が最も低い人物を取得(key引数にラムダ式を使用)
youngest = min(people, key=lambda person: person['age'])
print("最も若い人:", youngest)
# 出力例: 最も若い人: {'name': 'Bob', 'age': 25}

# 年齢が最も高い人物を取得
oldest = max(people, key=lambda person: person['age'])
print("最も年上の人:", oldest)
# 出力例: 最も年上の人: {'name': 'Charlie', 'age': 35}

実行結果

最も若い人: {'name': 'Bob', 'age': 25}
最も年上の人: {'name': 'Charlie', 'age': 35}

解説

  • peopleリストは、各要素が名前と年齢を持つ辞書で構成されています。
  • min(people, key=lambda person: person['age'])は、各辞書から'age'の値を抽出し、その値が最小の辞書を返します。
  • 同様に、max関数もkey引数を利用して最大の値に基づく要素を返します。

2.2. 応用例と注意点

 ラムダ式を利用したカスタム比較は、複雑なデータ構造に対して柔軟な基準で最小値や最大値を求める際に非常に有効です。しかし、比較に使用する値がすべての要素で一貫していない場合、エラーが発生する可能性があるため、各要素が同じ構造であることを確認する必要があります。以下の表は、ラムダ式を使った場合の基本的な操作をまとめたものです。

操作コード例結果例
最も若いの抽出min(people, key=lambda p: p['age']){'name': 'Bob', 'age': 25}
最も年上の抽出max(people, key=lambda p: p['age']){'name': 'Charlie', 'age': 35}

解説

  • ラムダ式により、各辞書から年齢情報のみを取り出して比較するため、名前やその他の情報は比較対象外となります。
  • この手法は、要素ごとに比較基準が異なる場合や、計算結果に基づいて最小・最大を求めたい場合に非常に役立ちます。

まとめ

 min関数とmax関数は、リストやタプル、その他のイテラブル内の最小値および最大値を簡単に取得できる強力なツールです。

  • 基本使用法: 単純にmin(イテラブル)max(イテラブル)とするだけで、辞書順や数値順に最小・最大の要素が取得できます。
  • カスタム比較: key引数にラムダ式を渡すことで、複雑なデータ構造から特定の基準に基づいて最小・最大を抽出することが可能です。

次のステップでは、タプルについて詳しく解説していきます。