如何使用cmp从python 2转换为python 3?

toy*_*toy 7 python sorting python-2.7 python-3.x

我正在尝试将这个用python 2编写的代码转换为python 3

nums = ["30", "31"]
num.sort(cmp=lambda x, y: cmp(y + x, x + y))
Run Code Online (Sandbox Code Playgroud)

不知道如何在python 3中做到这一点,因为cmp被删除(我相信)

结果应该是["31", "30"]而不是["30", "31"]

use*_*ica 10

这是比较器比关键功能更清洁的罕见情况之一.我实际上只是重新实现cmp:

try:
    cmp
except NameError:
    def cmp(x, y):
        if x < y:
            return -1
        elif x > y:
            return 1
        else:
            return 0
Run Code Online (Sandbox Code Playgroud)

然后用于functools.cmp_to_key将比较器转换为Python 3样式的键函数:

nums.sort(key=functools.cmp_to_key(lambda x, y: cmp(y+x, x+y)))
Run Code Online (Sandbox Code Playgroud)

对于任何想知道这种奇怪排序实际上是什么的人,它会找到连接输入字符串以产生按字典顺序排列的最大输出字符串的顺序.当所有字符串都是数字序列时,输出具有尽可能高的数值.

  • 或`def cmp(x,y):return(x&gt; y)-(x &lt;y)` (2认同)