首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python max() 函數完整指南:尋找最大值、多引數比較、自訂鍵與邊界情況

     編輯:更多程式設計知識

max() 是 Python 內建函數,用於回傳一組值中的最大值。它支援多引數、可迭代物件、自訂比較鍵,並能處理字串、元組等可比較型別。本文系統整理語法、參數、回傳值、進階用法與常見陷阱。

函數簽名


max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])

參數說明

形式參數說明
多引數arg1, arg2, ...兩個以上可比較的物件
key (可選)單引數函式,提取比較鍵
可迭代物件iterable非空可迭代物件(list, tuple, set, dict.keys() 等)
key (可選)同左
default (可選)若 iterable 為空,回傳此值(Python 3.4+),否則拋出 ValueError

基本範例


print(max(80, 100, 1000))        # 1000
print(max(-20, 100, 400))        # 400
print(max(-80, -20, -10))        # -10
print(max(0, 100, -400))         # 100

# 字串比較(依 Unicode 碼點)
print(max('apple', 'banana', 'cherry'))  # 'cherry'

# 列表/元組
print(max([3, 1, 4, 1, 5]))    # 5
print(max((3, 1, 4)))          # 4

自訂比較鍵


# 依絕對值最大
print(max(-10, 5, 8, key=abs))        # -10

# 字典列表依特定欄位
users = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
oldest = max(users, key=lambda u: u['age'])
print(oldest)  # {'name': 'Charlie', 'age': 35}

# 複雜物件
class User:
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def __repr__(self):
        return f"User({self.name}, {self.score})"

players = [User('A', 88), User('B', 95), User('C', 95)]
top = max(players, key=lambda p: (p.score, p.name))  # 分數相同再比名字
print(top)  # User(B, 95)

空序列處理


# Python 3.4+ 支援 default
print(max([], default=0))           # 0
print(max([], default=None))        # None

# 舊版相容寫法
def safe_max(iterable, default=None):
    try:
        return max(iterable)
    except ValueError:
        return default

進階技巧

  1. 多條件排序:key 回傳 tuple,Python 依序比較元素。
  2. 找出最大值索引:max(range(len(seq)), key=seq.__getitem__) 或 max(enumerate(seq), key=lambda x: x[1])[0]。
  3. 字典找最大值鍵:max(d, key=d.get)(回傳 key),max(d.values())(回傳 value)。
  4. 搭配 operator:max(items, key=itemgetter(1)) 比 lambda 略快。

常見錯誤與陷阱

  • 混合型別比較:Python 3 禁止 max(1, 'a')(TypeError),Python 2 允許但語意模糊。
  • 空序列無 default:直接 max([]) 拋出 ValueError: max() arg is an empty sequence。
  • 可變物件當 key:key 函式不應修改原物件,否則行為不可預期。
  • NaN 傳播:max([1, float('nan'), 2]) 回傳 nan,需先過濾。

效能備註

  • 時間複雜度 O(n),單次遍歷。
  • 大量數值陣列請用 numpy.max 或 np.ndarray.max(),向量化更快。
  • key 函式對每個元素只呼叫一次(內部用 Schwartzian transform),效能優於舊式 cmp。

max() 與其對應的 min() 是 Python 資料處理的基石,靈活運用 key、default 與 tuple 比較,能以極簡潔程式碼解決複雜的「找極值」問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved