Python max() 函数

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 表达式是一种简洁高效的方式,可以让我们在不改变对象本身的情况下,根据对象的任何属性(或计算结果)来定义比较标准。

上一篇: divmod()

下一篇: min()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号