Python 3:是否存在比较两个数字并返回-1、0或1的简便函数?若不存在,实现该功能的最简方式是什么?
Python 3 中数字比较返回 -1/1/0 的简便方法
嘿,刚好问到点子上了!Python 3 确实移除了 Python 2 里的内置 cmp() 函数,但我们有两种超实用的方式来实现你要的逻辑:
1. 一行极简代码实现
如果不想引入额外模块,最短的写法绝对是这行:
def compare(x, y): return (x > y) - (x < y)
原理很简单:Python 里布尔值 True 等价于 1,False 等价于 0。当 x>y 时,(True) - (False) 就是 1-0=1;x<y 时是 0-1=-1;相等时两边都是 False,0-0=0,完美匹配需求。
要是连函数都不想定义,直接用表达式 (x > y) - (x < y) 就行,随时可以直接调用。
2. 利用标准库函数(更语义化)
如果你想要更具可读性的写法,可以借助 math 模块的 copysign 配合差值实现:
import math def compare(x, y): return math.copysign(1, x - y) if x != y else 0
这种写法比上面的一行表达式稍长,但胜在语义清晰——通过差值的符号来决定返回 1 还是 -1,相等时返回 0。
另外补充个延伸用法:如果是要给排序函数提供比较逻辑,functools.cmp_to_key() 可以把这种返回 -1/1/0 的比较函数转换成排序能用的 key 函数,不过这就属于额外的场景用法啦。
内容的提问来源于stack exchange,提问作者FireFuro99
相关产品推荐
相关产品推荐

