Python最大值与最小值 max/min
中等3轻松找出最大最小值:Python 的 max 和 min 函数
生活中我们经常要比较大小。比如,全班同学的身高,谁最高?谁最矮?在一次考试中,最高分和最低分分别是多少?Python 里有两个非常好用的函数 —— max() 和 min(),可以帮我们快速找出“最大”和“最小”。它们就像两个小助手,你只要把数字(或其他可比较的东西)交给它们,它们就能立刻告诉你答案。
认识 max 和 min:一次比较多个数字
最简单的用法:把几个数字直接放进括号里,用逗号隔开。max() 会返回最大的那个,min() 返回最小的那个。
# 找出三个数字中最大的
print(max(10, 25, 18)) # 输出 25
# 找出三个数字中最小的
print(min(10, 25, 18)) # 输出 10
你可以一次放很多个数字,比如比较五个人的零花钱:
# 比较小明的零花钱 20元、小红的 35元、小刚的 15元、小丽的 40元、小华的 10元
pocket_money1 = 20 # 小明的零花钱
pocket_money2 = 35 # 小红的零花钱
pocket_money3 = 15 # 小刚的零花钱
pocket_money4 = 40 # 小丽的零花钱
pocket_money5 = 10 # 小华的零花钱
print("最多的零花钱:", max(pocket_money1, pocket_money2, pocket_money3, pocket_money4, pocket_money5)) # 40
print("最少的零花钱:", min(pocket_money1, pocket_money2, pocket_money3, pocket_money4, pocket_money5)) # 10
数字可以是整数、小数,甚至负数,max 和 min 都能正确处理:
print(max(-3, 0, 2)) # 2
print(min(-1.5, 0.3, -2.7)) # -2.7
从列表、元组、集合中找最大最小
如果数字非常多,一个一个写会很麻烦。我们可以先把它们放进一个列表(或其他“容器”),然后把整个列表丢给 max 或 min。
原版例子(升级加注释):
scores = [85, 92, 78, 95, 88] # 考试成绩列表
highest = max(scores)
lowest = min(scores)
print("最高分", highest) # 输出 最高分 95
print("最低分", lowest) # 输出 最低分 78
除了列表,也可以对元组和集合使用:
# 元组:一次体育测试的跑步成绩(秒)
running_times = (12.5, 11.8, 13.2, 11.5, 12.0) # 跑步时间元组
fastest = min(running_times) # 时间越短越快
slowest = max(running_times)
print("最快用时", fastest, "秒") # 11.5
print("最慢用时", slowest, "秒") # 13.2
# 集合:班级里不同喜欢的零食种类编号
snack_ids = {101, 205, 303, 107, 205} # 零食编号集合,注意集合会去重
print("最小编号:", min(snack_ids)) # 101
print("最大编号:", max(snack_ids)) # 303
字符串也能比大小
max 和 min 不仅能比较数字,还能比较字符串。字符串的比较规则是:按字母顺序(更准确地说是按字符的 Unicode 编码值)。比如 "apple" 和 "banana" 比较,第一个字母 a 比 b 小,所以 "banana" 更大。
# 比较两个水果名字
fruit1 = "apple"
fruit2 = "banana"
print("更大的水果名:", max(fruit1, fruit2)) # banana
print("更小的水果名:", min(fruit1, fruit2)) # apple
如果字符串有多个字母,Python 会一个一个字符比较,直到分出大小。比如 "cat" 和 "car",前两个字母都是 c 和 a,第三个字母 t 比 r 大,所以 "cat" 更大。
print(max("cat", "car")) # cat
注意:大小写也会影响结果,因为大写字母的编码值比小写字母小(比如 'A' 是 65,'a' 是 97)。所以 "Apple" 比 "banana" 小。
print(max("Apple", "banana")) # banana (因为 'A' 小于 'b')
进阶使用:用 key 自定义比较规则
有时候我们不想直接比较元素本身,而是想根据元素的某个属性来比较。比如,我们有多个同学的分数,但数据是字符串 "小明:85" 这种格式,想找出分数最高的同学。这时可以用 key 参数,指定一个“转换函数”,让 max 或 min 先对每个元素应用这个函数,再比较结果。
# 学生成绩信息,格式是 "名字:分数"
students = ["小明:85", "小红:92", "小刚:78", "小丽:95", "小华:88"]
# 定义一个函数,提取分数(冒号后面的数字)
def get_score(student):
# 用 split(':') 按冒号分割,取第二部分并转成整数
return int(student.split(':')[1])
# 找出分数最高的学生
best_student = max(students, key=get_score)
print("最高分的学生:", best_student) # 小丽:95
# 也可以直接写 lambda 表达式,更简洁
worst_student = min(students, key=lambda s: int(s.split(':')[1]))
print("最低分的学生:", worst_student) # 小刚:78
key 参数还可以配合 abs(绝对值)来找出距离 0 最远的数字:
numbers = [-10, 5, -3, 8, -1] # 一组数
farthest = max(numbers, key=abs) # 按绝对值比较,-10 的绝对值最大
print("距离0最远的数:", farthest) # -10
常见错误与注意事项
-
空列表或空序列会报错
当你用max([])或min([])对一个空列表求值,Python 会抛出ValueError,因为它找不到任何元素来比较。# 错误示例 empty_list = [] # print(max(empty_list)) # 运行会报错:ValueError: max() arg is an empty sequence解决方法:确保序列非空,或者使用
default参数(Python 3.4+)提供一个默认值,当序列为空时返回它。safe_max = max(empty_list, default=0) # 如果列表为空,返回 0 print(safe_max) # 0 -
混合不同类型可能出错
max和min要求所有元素是“可比较”的。比如把数字和字符串混在一起:# print(max(5, "hello")) # 报错:TypeError: '>' not supported between instances of 'str' and 'int'通常,我们需要保证传入的元素类型相同(都是数字或都是字符串)。
-
对字典使用
max和min时注意
如果直接对字典使用max(d),它比较的是字典的键,而不是值。要想找出值最大的键,需要用key参数。fruit_prices = {"apple": 5, "banana": 3, "orange": 8} # 水果价格字典 # 直接 max 比较键 print(max(fruit_prices)) # orange(按字母顺序最大的键) # 按价格比较,找出最贵的水果名 most_expensive = max(fruit_prices, key=fruit_prices.get) print("最贵的水果:", most_expensive) # orange(价格 8)
完整示例:班级成绩统计
下面是一个结合了列表、字符串比较和 key 参数的完整程序,帮助你巩固知识。假设我们有三位同学的成绩单,我们要找出:最高分、最低分,以及成绩最好的同学名字。
# 三位同学的成绩数据:名字和分数
student1_name = "张明"
student1_score = 88
student2_name = "李丽"
student2_score = 95
student3_name = "王强"
student3_score = 72
# 将分数放进列表
score_list = [student1_score, student2_score, student3_score] # 分数列表
highest_score = max(score_list) # 最高分
lowest_score = min(score_list) # 最低分
print("全班最高分:", highest_score) # 95
print("全班最低分:", lowest_score) # 72
# 用字典存储名字和分数,找出分数最高的同学
student_dict = {
student1_name: student1_score,
student2_name: student2_score,
student3_name: student3_score
}
best_student = max(student_dict, key=student_dict.get) # 按分数找名字
worst_student = min(student_dict, key=student_dict.get)
print("成绩最好的同学:", best_student) # 李丽
print("成绩最差的同学:", worst_student) # 王强
运行这段代码,你会看到清晰的输出结果,就像老师在统计成绩一样简单。
延伸学习
max 和 min 是 Python 内置函数中最常用的一对。学会了它们,你还可以学习:
sum():计算总和,比如全班总成绩。sorted():对列表排序,从大到小或从小到大,配合reverse参数。len():获取列表长度,结合max可以找出最长的字符串。abs():求绝对值,配合key可以实现一些特殊比较。
下次遇到“谁最高”“谁最矮”“哪个最大”“哪个最小”的问题,别忘了这两个好朋友——max 和 min!
例题精讲
在Python中,执行 `max(3, 7, 1, 9, 4)` 的结果是什么?
在Python中,执行 `min([8, 2, 5, 10, 3])` 的结果是2。
以下代码用于找出列表 `scores` 中的最高分并打印,请填写空白处。
scores = [88, 92, 75, 96, 83]
max_score = ___(scores)
print(max_score)对于字符串列表 `['apple', 'Banana', 'cherry', 'Date']`,执行 `min(['apple', 'Banana', 'cherry', 'Date'])` 的结果是什么?(提示:字符串比较按字典序,大写字母小于小写字母)
以下代码需要找出四个数中的最小值并打印,请补充完整。
a = 15
b = 8
c = 22
d = 12
min_value = ___(a, b, c, d)
print(min_value)