如何在函数中处理四个输入数字,单行代码实现取两个最小值并执行计算
如何在函数中处理四个输入数字,单行代码实现取两个最小值并执行计算
嘿,我太懂你不想写一堆嵌套if-else的痛苦了,其实用Python的内置工具就能轻松实现你要的单行逻辑,完全不用复杂的分支判断。
给你几个简洁的实现方案,都是一行函数体就能搞定的:
方案1:用排序+切片(最直观)
这应该是最符合你需求的写法,逻辑清晰,一眼就能看懂:
def square(a, b, c, d): return [x * 2 for x in sorted([a, b, c, d])[:2]]
简单解释下:
- 先把四个参数放进列表
[a, b, c, d] sorted()会自动把列表从小到大排序[:2]是切片操作,直接取排序后列表的前两个元素(也就是最小的两个数)- 最后用列表推导式对这两个数执行你需要的计算(这里是乘2,你可以换成任何你要的操作,比如
x**2求平方之类的)
方案2:用堆队列取最小元素(更高效的通用写法)
如果以后你要处理的数字变多,或者想追求更高效的取最小元素方式,可以用heapq模块的nsmallest函数,写法同样简洁:
import heapq def square(a, b, c, d): return [x * 2 for x in heapq.nsmallest(2, [a, b, c, d])]
heapq.nsmallest(2, 列表)会直接返回列表中最小的2个元素,不用全量排序,数据量大的时候性能更好,不过对于四个数来说,两种方法的效率差别可以忽略不计,看你个人偏好选择。
补充:你之前尝试的sort+pop思路也能改写成单行
如果你还是想试试自己一开始想到的sort+pop的思路,其实也能整合到单行里(不过可读性稍差一点):
def square(a, b, c, d): nums = [a,b,c,d]; nums.sort(); return [x*2 for x in nums[:2]]
这里用分号把多行代码合并成一行,但其实不太推荐这种写法,因为会牺牲代码的可读性,前面两种方案的可读性要好得多。
不管选哪种,都完全避开了讨厌的if-else分支,而且代码简洁紧凑,符合你要的“单行实现”的需求~
备注:内容来源于stack exchange,提问作者C P
相关产品推荐
相关产品推荐

