【问题标题】:Comparison function in Python using LambdasPython 中使用 Lambda 的比较函数
【发布时间】:2010-10-06 00:14:43
【问题描述】:

我正在尝试理解 lambda,我明白了,但是如何为 Point2 [x,y] 比较定义多个条件,例如:

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

【问题讨论】:

  • -1:花时间“理解” lambdas。它们的“def”拼写很有趣。

标签: python sorting lambda


【解决方案1】:

上面的代码相当于:

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 ...

【讨论】:

  • 当你说:如果 x1>x2 它返回什么?它只是去别的地方?
  • 1 if x1>x2 else (0 if x1==x2 else -1) 是 Java 的 Python 等价物:x1>x2?1:(x1==x2?0:-1)。是的,它会尝试 x1>x2,如果它是 False,它会在 else 之后取值,如果是 True,它会在它之前取值(在这种情况下为 1)
  • 从 PEP 308 开始,如果您将括号放入:“lambda x1,x2: (1 if x1>x2 else (0 if x1==x2 else -1) ))" - 但我无法轻易测试。
  • 谢谢乔恩,不知道。
【解决方案2】:
my_compare = lambda x1,x2 : cmp(x1, x2)
my_compare( -100, 100 )

【讨论】:

  • my_compare = cmp; my_compare(-100, 100)
  • 更好的是: cmp(-100, 100) 代码纯粹是为了演示 lamda 的用法。
【解决方案3】:

在这种情况下,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)

是要走的路。

【讨论】:

    【解决方案4】:

    编辑:根据PEP308 更新为真正的 Python :) 请注意,PEP 有一些有趣的信息,说明如何根据您使用的 Python 版本将其括起来。我不会尝试在这里复制它 - 只需阅读 PEP!

    怎么样:

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

    (这对 Python lambda 表达式没有任何了解,但这是在单个表达式中表达此逻辑的一种相当常见的方式,我猜这就是您所追求的。)

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

    【讨论】:

    • 谢谢乔恩。看到你回答了一个 python 问题,我很惊讶,但我知道你会从 C# 中获得很好的 lambda 知识:)
    • Doh - 查看了 Python 页面,但它给出了 PHP 的示例。啊。试图一次做太多事情。
    【解决方案5】:

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

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

    【讨论】:

    • ...如果他们是平等的呢?
    • 那么相等的元素将被返回,我猜这很直观
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多