首页 > 解决方案 > 将排序从 Python2 转换为 Python3

问题描述

我在 Python2 中编写了一个排序,我正在尝试将其转换为 Python3,它要求输入一个密钥并说没有更多的 cmp 函数可用:

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

有什么建议吗?

此致,

标签: pythonpython-3.xsortingcmp

解决方案


官方 python 3 文档在本节中解释了将其从 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])
)) 

推荐阅读