Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将排序从Python2转换为Python3_Python_Python 3.x_Sorting_Cmp - Fatal编程技术网

将排序从Python2转换为Python3

将排序从Python2转换为Python3,python,python-3.x,sorting,cmp,Python,Python 3.x,Sorting,Cmp,我已经用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])) 有什么建议吗 致以最诚挚的问候,官方python 3文档提供了将其从python 2转换为python 3的正确方法 原始的cmp函数的作用如下 def cmp(x, y): if x == y: re

我已经用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]))
有什么建议吗


致以最诚挚的问候,

官方python 3文档提供了将其从python 2转换为python 3的正确方法

原始的
cmp
函数的作用如下

def cmp(x, y):
   if x == y:
       return 0
   elif x > y:
       return 1
   else:
       return -1
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])
)) 
也就是说,它相当于符号(x-y),但也支持字符串和其他数据类型

但是,您的问题是,
sort
的当前函数不适用于具有两个参数的比较函数,而适用于具有一个参数的单个
函数。Python提供了
functools.cmp\u to\u key
来帮助您转换它,因此,执行如下操作

def cmp(x, y):
   if x == y:
       return 0
   elif x > y:
       return 1
   else:
       return -1
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])
)) 

你到底在哪一点上被卡住了?请编辑你的问题,完全出于好奇——这类问题应该做什么?最后一次比较元素2、4或9时,结果总是不相等(或者-1或1),或者只有0表示相等。。。最后。。。这在我看来几乎是随机的。我觉得这不是你想要的,即使你可以用它。。。你确定你作为一个键所追求的不仅仅是
key=lambda L:(L[2],L[4],L[9])
所以你得到了某种“顺序”吗?这里有两个独立的问题:1)找到
cmp
函数的替代品,2)使
sort
key=/code>函数一起工作。这两个独立的问题有两个独立的答案,所以将来请分别询问每个问题。
测试的结构是什么?例如,它是一个列表列表,还是一个元组列表?test被创建成这样的循环:test.append((id,sexe,nom,prenom,date_-naissance,telephone,sejour_-id,etat,type,valeur))