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

2024-03-23

我正在尝试将用 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 https://docs.python.org/3/library/functools.html#functools.cmp_to_key将比较器转换为 Python 3 风格的键函数:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 cmp 将排序从 python 2 转换为 python 3? 的相关文章

随机推荐