Python max() 语法
max() 是 Python 的一个内置函数,它可以用于以下 2 个方面。
- 获取可迭代对象中 “值最大” 的项。
- 获取多个值中的最大项。
语法:
# 方式 1
max(iterable, key=None, default=None)
# 方式 2
max(arg1, arg2, ..., argN, key=None)说明:
方式 1 是单可迭代对象参数形式,说明如下。
iterable(必选):是一个可迭代对象。其中,列表、元组、字典等都是可迭代对象。key(可选):是一个函数,用于生成比较键(比如 key=str.lower)。default(可选):当 iterable 为空时,返回的默认值。
方式 2 是多参数形式,说明如下。
arg1、arg2、...、argN(必选):可以是数字、字符串或同类型可比较对象。如果是字符串,则按字母顺序进行比较。key(可选):是一个函数,用于生成比较键(比如 key=str.lower)。
对于 max() 函数来说,所有待比较的元素必须是可比较的。也就是说,它们要么是相同类型(且该类型支持比较操作),要么是不同类型但可以相互比较(比如整数和浮点数)。如果类型之间无法比较(例如,数字和字符串),会引发 TypeError 异常。
提示: min() 函数语法与 max() 的完全一致,但功能相反。
Python max() 摘要
| 使用频率 | 高 |
|---|---|
| 时间复杂度 | O(n) |
| 官方文档 | 查看 |
| 相关函数 | min()、sum() |
Python max() 示例
接下来,我们通过几个简单的例子来讲解一下 Python max() 函数是如何使用的。
示例 1:max() 参数是列表
nums = [3, 9, 1, 12, 50, 21]
result = max(nums)
print(result)运行结果如下。
50分析:
nums 是一个列表,而列表是一个可迭代对象。
示例 2:max() 参数是字符串
s = 'Python'
result = max(s)
print(result)运行结果如下。
y分析:
max(s) 表示获取 s 中最大的字符,也就是 ASCII 码值最大的字符。
示例 3:max() 参数是多个数字
result = max(3, 9, 1, 12, 50, 21)
print(result)运行结果如下。
50示例 4:max() 参数是多个字符串
result = max('bee', 'cat', 'ant')
print(result)运行结果如下。
cat分析:
比较字符串的大小,其实是依次比较字符的 ASCII 码。首先,比较字符串的第一个字符,如果第一个字符的 ASCII 码相等,接着再比较第二个字符,依此类推。
深入理解 max()
max() 函数不仅能处理基本的数字和字符串,还能通过一些技巧来满足更复杂的比较需求。
1. max() 用于比较字典
当直接对字典使用 max() 时,它会默认比较 “字典的键(key)” ,而不是 “值(value)” 。比较规则遵循键的自然排序(例如,字符串会按字母顺序,数字会按数值大小)。
示例 5:max() 比较字典
d = {'a': 10, 'b': 25, 'c': 15}
print(max(d))运行结果如下。
c分析:
直接将字典传给 max() ,它会遍历字典的键并找出 “最大” 的键(按字母顺序)。
2. max() 用于比较自定义对象
当 max() 遇到自定义类的对象时,它需要知道如何比较这些对象。我们有两种主要方式来实现这一点:(1)定义对象的比较方法(如 __gt__() 等);(2)或使用 max() 的 key 参数。
示例 6:定义 __gt__() 方法
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f'Product(\'{self.name}\', {self.price})'
# 定义 “大于” 操作,让价格高的产品更大
def __gt__(self, other):
if not isinstance(other, Product):
return NotImplemented
return self.price > other.price
products = [
Product('音箱', 1200),
Product('鼠标', 25),
Product('键盘', 75)
]
result = max(products)
print(result)运行结果如下。
Product('音箱', 1200)分析:
通过自行实现 __gt__() 等方法,我们可以为自定义对象定义比较行为。然后就可以直接将对象列表传给 max(),它会根据定义的规则进行比较。
示例 7:使用 key 参数
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 用于更友好的打印输出
def __repr__(self):
return f'Person(\'{self.name}\', {self.age})'
people = [
Person('Jack', 20),
Person('Michael', 25),
Person('Sophia', 30),
Person('Lily', 28)
]
# 找出年龄最大的人
result1 = max(people, key=lambda p: p.age)
print(result1)
# 找出名字长度最长的人
result2 = max(people, key=lambda p: len(p.name))
print(result2)运行结果如下。
Person('Sophia', 30)
Person('Michael', 25)分析:
使用 key 参数的 lambda 表达式是一种简洁高效的方式,可以让我们在不改变对象本身的情况下,根据对象的任何属性(或计算结果)来定义比较标准。
