You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的max函数找第二大数?代码中min(arr)-1作用存疑

解释代码里min(arr)-1的作用

先拆解你这段代码的逻辑:你已经通过arr1 = max(arr)拿到了数组的最大值,接下来要找第二大的数,所以用了带key参数的max函数来实现。

这个lambda表达式的规则是:

  • 当当前元素x等于最大值arr1时,给它的排序键设为min(arr)-1
  • 当x不是最大值时,排序键就是元素本身x

min(arr)-1的核心作用就是:把所有等于最大值的元素的键值,设置成比数组里最小元素还小的数值。这样在调用max函数时,这些最大值元素的键值会是整个数组里最小的,自然不会被max选中,剩下的元素中键值最大的那个,就是原数组的第二大数。

举个实际例子:假设输入数组是[5, 3, 5, 2],min(arr)是2,min(arr)-1就是1。此时每个元素对应的key值为:

  • 第一个5 → 1
  • 3 → 3
  • 第二个5 → 1
  • 2 → 2

这时max(arr, key=...)会选择key值最大的3,也就是原数组的第二大数,完全符合预期。

不过这种写法存在一个小问题:如果数组里所有元素都相同(比如[4,4,4]),min(arr)-1会把所有元素的key都设成更小的数,最后max返回的还是4,但这时候其实不存在真正的第二大数,这属于业务逻辑层面的特殊情况需要额外处理。

另外,还有更直观的写法可以实现找第二大数的需求,比如先过滤掉所有最大值再取剩余元素的最大值:

n = int(input())
arr = list(map(int, input().split()))
max_val = max(arr)
# 过滤掉所有等于最大值的元素
filtered_arr = [num for num in arr if num != max_val]
# 处理所有元素都是最大值的情况
second_max = max(filtered_arr) if filtered_arr else max_val
print(second_max)

内容的提问来源于stack exchange,提问作者Sanjana Hongunti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:24:25