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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:38:11