使用Lambdas的Python中的比较函数

时间:2009-02-06 18:19:27

标签: python sorting lambda

我正在尝试理解lambdas并得到了这个想法,但我如何为Point2 [x,y]比较定义多个条件,所以类似于:

if x1 < x2: -1
if x1 == x2: 0
if x1 > x2: 1

5 个答案:

答案 0 :(得分:5)

上面的代码相当于:

cmp(x1,x2)

或(丑陋的)lambda表达式:

lambda x1,x2: 1 if x1>x2 else (0 if x1==x2 else -1)

(仅适用于Python 2.6及更高版本)。

通常,您应该仅将lambda表达式用于

之类的函数
def fun(...):
    return ...

答案 1 :(得分:4)

my_compare = lambda x1,x2 : cmp(x1, x2)
my_compare( -100, 100 )

答案 2 :(得分:4)

在这种情况下,lambda表达式通常不是最好的。正如Jon Skeet所提到的,你将以多个if-else表达式结束:

lambda x1, x2: -1 if x1 < x2 else (0 if x1 == x2 else -1)

针对您的具体问题:

lambda x1, x2: cmp(x1, x2)

是要走的路。

答案 3 :(得分:3)

编辑:根据PEP308更新为真正的Python :)请注意,PEP有关于如何将其括起来的有趣信息,具体取决于您使用的Python版本。我不会尝试在这里重现它 - 只需阅读PEP!

怎么样:

-1 if x1 < x2 else (0 if x1 == x2 else 1)

(没有任何Python lambda表达式的知识,但这是在单个表达式中表达这种逻辑的一种相当常见的方式,我想这就是你所追求的。)

编辑:其他人建议使用cmp - 我一直认为提问者实际上想要更复杂的逻辑,例如提供他们自己的比较,但是想要一般的形式“从一些条件中选择单一表达“。

答案 4 :(得分:0)

只需一行代码即可返回两个值中的最大值:

greater = lambda x,y : x if (x>y) else y   
print(greater(3,5))