【问题标题】:Porting sort with lambda function to Python 3将带有 lambda 函数的排序移植到 Python 3
【发布时间】:2016-01-24 20:46:23
【问题描述】:

我正在将代码从 Python 2.7 移植到 3。2to3 不会转换以下行,并且似乎无法弄清楚。任何帮助表示赞赏。

subpaths.sort(
    lambda x, y :
        int(pyx.unit.tocm(x.arclen() - y.arclen()) /
            math.fabs(pyx.unit.tocm(x.arclen() - y.arclen()))) )

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误在问题本身中重现它所需的最短代码。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable Example
  • 在不知道subpaths 是什么以及xy 是什么的情况下,无法回答这个问题。
  • 但它的答案...

标签: sorting python-3.x lambda


【解决方案1】:

listsort 方法需要key,它是一个只有一个参数的函数。您需要将 lambda 函数转换为单个参数的函数。 functools.cmp_to_key 提供了一个快捷方式。因此,您可能需要的是:

import functools
subpaths.sort(key=functools.cmp_to_key(lambda x, y: ...))

请注意,如果我正确理解了您的代码,您可以简单地使用以下键对列表进行排序:

subpaths.sort(key=lambda x: pyx.unit.tocm(x.arclen()))

【讨论】:

  • 此解决方案无疑是最快实施的。但是,如果 OP 有时间,IMO 他应该考虑将 cmp lambda 替换为从头开始编写的 key lambda,以提高效率和可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多