
本文介绍如何通过排序与海象运算符(:=)在单行内高效获取四个数字中最小的两个,并立即进行乘法运算,避免冗长的条件判断或多次列表操作。
本文介绍如何通过排序与海象运算符(:=)在单行内高效获取四个数字中最小的两个,并立即进行乘法运算,避免冗长的条件判断或多次列表操作。
在 Python 中,若需从四个输入参数中快速提取两个最小值并执行计算(如相乘),最简洁且可读性良好的单行解法是结合 sorted() 与海象运算符(:=)——它允许我们在表达式中赋值并复用结果,从而避免创建临时变量或拆分成多行。
以下是一个完整、可直接运行的函数示例:
def square(a, b, c, d):
return (z := sorted([a, b, c, d]))[0] * z[1]
该函数将输入的四个数值组成列表,调用 sorted() 升序排列(时间复杂度 O(n log n),对 n=4 来说极高效),再通过海象运算符将排序结果赋给临时变量 z,最后直接访问索引 0 和 1(即最小值与次小值)并相乘。
✅ 示例调用:
print(square(7, 2, 9, 1)) # 输出:2 → 因为 sorted([7,2,9,1]) == [1,2,7,9],故 1 * 2 = 2 print(square(5, 5, 3, 8)) # 输出:15 → [3,5,5,8] → 3 * 5 = 15
⚠️ 注意事项:
- 海象运算符
:=自 Python 3.8 起可用,请确保运行环境版本兼容; - 若需处理重复值(如
[3,3,5,8]),上述方法天然支持——最小两数即前两项,无需额外去重; - 虽然“单行”实现满足了语法简洁性,但实际工程中应优先保障可读性与可调试性;若逻辑扩展(如求最小两数的平方和、加权平均等),建议将排序结果单独赋值,再分步计算,以提升维护性。
总结:sorted([a,b,c,d])[0] * sorted([a,b,c,d])[1] 看似直观,却会排序两次;而 (z := sorted(...))[0] * z[1] 仅排序一次,兼顾效率、简洁与正确性,是此类问题的理想一行解法。










