概要(max は「一番大きいもの」を返す基本関数)
max は、与えた複数の値や、リスト・タプル・集合などのイテラブルの中から「最大の要素」を返す組み込み関数です。数値だけでなく文字列やタプルなど“比較可能”なものなら使えます。複数の引数を並べても、イテラブルをひとつ渡しても動作します。
print(max(5, 2, 8, 1)) # 8
print(max([10, 20, 5])) # 20
print(max("banana")) # 'n'(文字列は辞書順で比較)
Python基本構文と引数(ここが重要)
形式は2通り(複数引数/イテラブル)
複数の値を並べる書き方と、イテラブル(リストなど)をひとつ渡す書き方があります。返り値は「最大の要素」です。
print(max(3, 7, 2)) # 7
nums = [3, 7, 2]
print(max(nums)) # 7
Pythonkey で「比較基準」を指定できる
key=関数 を渡すと、各要素に対して「並べ替えや比較に使う基準値」を計算して、その値で大小判定します。柔軟で強力なので、必ず押さえておくべきポイントです。
words = ["tea", "espresso", "latte"]
print(max(words, key=len)) # 'espresso'(文字数が最大)
items = [("coffee", 350), ("tea", 280), ("juice", 220)]
print(max(items, key=lambda x: x[1])) # ('coffee', 350)(価格が最大)
Pythondefault で「空のときの戻り値」を決められる
空のイテラブルを渡すと通常は ValueError になりますが、default=値 を指定するとその値が返ります。欠損があり得る場面で安全に書けます。
empty = []
print(max(empty, default=None)) # None(エラーを避ける)
Python数値・文字列・辞書での使い方(具体例で理解する)
数値の最大値(単純だが頻出)
センサ値、点数、価格などの“最大”を一発で取れます。合計や平均と組み合わせるのが実務の定番です。
scores = [70, 85, 90]
print(max(scores)) # 90
Python文字列の最大値(辞書順)
文字列は“辞書順”(Unicodeのコードポイント順)で比較されます。大小無視にしたいときは key=str.casefold を使います。
names = ["taro", "Hanako", "JIRO"]
print(max(names)) # 'taro'(辞書順)
print(max(names, key=str.casefold)) # 'taro'(大小無視)
Python辞書の最大値(キー/値で選ぶ)
そのまま max(d) は「最大のキー」を返します。値で判定したいなら items() と key を使います。
prices = {"coffee": 350, "tea": 280, "juice": 220}
print(max(prices)) # 'tea'(キーの辞書順で最大)
print(max(prices.items(), key=lambda kv: kv[1])) # ('coffee', 350)
Python重要ポイントの深掘り(安定比較・複合キー・性能)
「複合条件」はタプルを返す key が簡潔
複数の条件で比較したいときは、key でタプル(第一条件, 第二条件, …)を返します。辞書順で順に比較してくれるため、同点のタイブレークが自然に書けます。
products = [
{"name": "coffee", "price": 350},
{"name": "tea", "price": 350},
{"name": "juice", "price": 220},
]
best = max(products, key=lambda p: (p["price"], p["name"]))
print(best) # 価格最大、同価格なら名前で最大 → {'name': 'tea', 'price': 350}
Python比較できない型の混在は TypeError
数値と文字列など“比較不能な型”が混ざっているとエラーになります。事前に型を揃えるか、key で比較対象を統一します。
data = ["10", 2, "30"]
# print(max(data)) # TypeError
print(max(data, key=str)) # '30'(文字列として比較)
Pythonkey が重い処理なら「一度だけ計算」する
max は比較のために key 関数を複数回呼びます。高コスト計算なら、先に基準値を添えてから一度の比較で済ませると効率的です(“装飾してから剥がす”テクニック)。
files = ["file2.txt", "file10.txt", "file1.txt"]
decorated = [(int(f[4:-4]), f) for f in files] # 数値部分を先に抽出
print(max(decorated)[1]) # 'file10.txt'
Pythonよくある落とし穴と安全策
空イテラブルでの ValueError
max([]) はエラーになります。欠損があり得るなら default を使うか、事前に空チェックをします。
items = []
print(max(items, default="N/A")) # 'N/A'
Python“falsy”値を既定値と誤解しない
key の結果が 0 や “” といった falsy でも「有効な比較値」です。or などで置換しないで、そのまま比較に使いましょう。
texts = ["", "a", "ab"]
print(max(texts, key=len)) # 'ab'(長さの比較)
Python文字列の“見た目”と辞書順のズレ
辞書順は人間の“読み順”と異なる場合があります。日本語や大小無視が必要なら、正規化(ひらがな化、casefold)を key に組み込みます。
words = ["アップル", "あさ", "バナナ"]
# 要件に応じた正規化関数を key に
Python例題で身につける(定番から一歩先まで)
例題1:最も長い単語を取る
words = ["tea", "espresso", "latte"]
print(max(words, key=len)) # 'espresso'
Python例題2:価格が最大の商品(辞書)
products = [
{"name": "coffee", "price": 350},
{"name": "tea", "price": 280},
{"name": "juice", "price": 220},
]
print(max(products, key=lambda p: p["price"])) # {'name': 'coffee', 'price': 350}
Python例題3:複合条件で最大(価格→在庫)
items = [
{"name": "A", "price": 300, "qty": 2},
{"name": "B", "price": 300, "qty": 5},
{"name": "C", "price": 250, "qty": 10},
]
print(max(items, key=lambda x: (x["price"], x["qty"]))) # B
Python例題4:空を安全に扱う(default)
nums = []
print(max(nums, default=None)) # None(エラー回避)
Pythonまとめ
max は「最大の要素」を返す基本関数で、複数引数にもイテラブルにも対応します。key で比較基準を柔軟に設計でき、複合条件は“タプルキー”が簡潔。空の可能性があるなら default を活用し、型混在による比較不能や重い key の過剰評価に注意しましょう。これらを押さえれば、数値・文字列・辞書・ファイル名など、あらゆる“最大”を安全かつシンプルに見つけられます。
