将排序从Python2转换为Python3

时间:2018-09-18 11:11:01

标签: python python-3.x sorting cmp

我已经在Python2中编写了一个排序,我试图将其转换为Python3,该Python 3要求输入密钥,并说不再有cmp函数可用:

test.sort(lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9]))

有什么建议吗?

最诚挚的问候,

1 个答案:

答案 0 :(得分:2)

python 3官方文档explains in this section是将其从python 2转换为3的正确方法。

原始的cmp函数只是做类似的事情

def cmp(x, y):
   if x == y:
       return 0
   elif x > y:
       return 1
   else:
       return -1

也就是说,它等效于sign(x-y),但还支持字符串和其他数据类型。

但是,您的问题是sort的当前函数不适用于具有两个参数的比较函数,而不能与具有一个参数的单个key函数一起使用。 Python提供了functools.cmp_to_key来帮助您进行转换,因此,可以做类似的事情

test.sort(key = functools.cmp_to_key(
    lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9])
))