python - 如何使用 cmp 将排序从 python 2 转换为 python 3?

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

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

nums = ["30", "31"]
num.sort(cmp=lambda x, y: cmp(y + x, x + y))

不确定如何在 python 3 中执行此操作,因为 cmp 已被删除(我相信)

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

最佳答案

这是比较器比键函数干净得多的罕见情况之一。我实际上只是重新实现了 cmp:

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

然后使用 functools.cmp_to_key将比较器转换为 Python 3 风格的键函数:

nums.sort(key=functools.cmp_to_key(lambda x, y: cmp(y+x, x+y)))

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

关于python - 如何使用 cmp 将排序从 python 2 转换为 python 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603757/

相关文章:

Python 从预定事件返回值

python - 如果我不触摸它,为什么多处理会复制我的数据?

python - 在 Mac 上安装 MySQLdb

python - 使用字典从字符串中检索字典列表

python - 给定二维列表和值库的所有值的加权平均值

python - 内存映射 ndarray 上的 numpy.std 因 MemoryError 失败

python - 使用 iterrows() 时如何通过索引访问列

python-2.7 - Reportlab pdf编码

python - 异常签名

Python Kivy ~ PanedWindow