如何在Python3中使用cmp(a,b)?


16

有人告诉我,在code-golf中使用该cmp功能非常有用。但是不幸的是,Python 3没有cmp功能。

那么,最短的等价cmp于python 3是什么呢?


3
您应该明确说明您正在寻找cmp高尔夫的替代方法。否则,这可能很快就会成为一般编程问题的答案。
马丁·恩德

@MartinBüttner我认为这是在OP的上下文高尔夫咨询问题,其中使用的答案cmp,虽然这个问题问的Python 3
同或

@xnor我知道是的,但其他人可能没有。
马丁·恩德

如果它是有用的知道,你可以使用cmp(a,b)Python中的2
mbomb007

Answers:


34

Python 3没有cmp。打高尔夫球,你可以

11个字符

(a>b)-(a<b)

损失了3个字符cmp(a,b)

有趣的是,这也是一种“官方”解决方法。“ Python 3的新增cmp()功能”页面显示“((如果确实需要此功能,则可以将表达式(a > b) - (a < b)用作的等效项cmp(a, b)。)”


15
当心优先问题!cmp(a,b)的实际等效项是((a> b)-(a <b))
Sparr,2015年

如果a或b是更复杂的表达式-比如说对运行时间很长的函数的调用,那么这对您的运行时间非常不利。更糟的是,如果a或b包含对具有副作用的函数的调用,这甚至可能会更改程序的语义。
Algoman '18

1
@Algoman哦,是的,运行时间是代码查询/ s的最重要部分。如果你想避免运行功能两次,只是将它们分配给事先变量(你很可能会最终会做反正对字节保存)
乔金

我正在研究编译器-它读取一个表达式,并据此生成一个表达式。原始表达式中的cmp可以嵌套得很深。如果要生成这样的目标代码,将很难实现(如果不是不可能的话)。
Algoman

1
@Algoman所以替换cmp(exp1,exp2)(lambda a,b:(a>b)-(a<b))(exp1,exp2)
安德斯·卡塞格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.