【问题标题】:Equivalent of sorted function with compare function in Python 3 [duplicate]Python 3中排序函数与比较函数的等价物[重复]
【发布时间】:2019-12-17 03:51:50
【问题描述】:

这在 Python 2.7 中完美运行

def some_compare_func(x, y):
  ....

a = sorted(some_list, lambda x, y: some_compare_func(x, y))

但是,在 Python 3.x 中同样会出现此错误。

TypeError: sorted expected 1 arguments, got 2

有没有一种方法可以使用在 Python 2.7 和 3.x 中都可以使用的排序函数进行排序?

【问题讨论】:

  • 但是它不再适用于 Python 2.7。伙计,这很烦人:(
  • 是的,试过了,在 2.7 中不起作用。说 TypeError: () 只需要 1 个参数(给定 2 个)
  • 你能展示一个实际的最小可重现示例吗?您还必须通过像 key = lambda...这样的关键字参数来指定键。
  • 您可能想看看official documentation,它解释了如何将使用 Python 2 排序的代码移植到 Python 3。

标签: python python-3.x python-2.7 sorting


【解决方案1】:

您可以使用functools.cmp_to_key() 将python2 样式cmp 转换为key

以下代码应该在 python2 和 python3 中都可以工作

def some_compare_func(x, y):
  ....

import functools
a = sorted(some_list, key=functools.cmp_to_key(some_compare_func))

查看https://docs.python.org/3/howto/sorting.html#the-old-way-using-the-cmp-parameter了解更多详情

【讨论】:

  • 太棒了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2014-04-20
  • 2019-12-12
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多