我正在尝试将这个用
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)))
对于任何想知道这种奇怪排序实际上是什么的人,它会找到连接输入字符串以产生按字典顺序排列的最大输出字符串的顺序.当所有字符串都是数字序列时,输出具有尽可能高的数值.