如何在Python 3中使用cmp()?

如何在Python 3中使用cmp()?,python,python-3.x,Python,Python 3.x,我无法使命令cmp()工作 代码如下: a = [1,2,3] b = [1,2,3] c = cmp(a,b) print (c) 我得到一个错误: Traceback (most recent call last): File "G:\Dropbox\Code\a = [1,2,3]", line 3, in <module> c = cmp(a,b) NameError: name 'cmp' is not defined [Finished in 0.1s]

我无法使命令
cmp()
工作

代码如下:

a = [1,2,3]
b = [1,2,3]
c = cmp(a,b)
print (c)
我得到一个错误:

Traceback (most recent call last):
  File "G:\Dropbox\Code\a = [1,2,3]", line 3, in <module>
    c = cmp(a,b)
 NameError: name 'cmp' is not defined
[Finished in 0.1s]
回溯(最近一次呼叫最后一次):
文件“G:\Dropbox\Code\a=[1,2,3]”,第3行,在
c=cmp(a,b)
NameError:未定义名称“cmp”
[在0.1s内完成]

如注释中所述,
cmp
在Python 3中不存在。如果你真的想要它,你可以自己定义它:

def cmp(a, b):
    return (a > b) - (a < b) 
def cmp(a、b):
返回(a>b)-(a

这是从原来的。尽管并非前所未闻,但它确实是需要的,这是非常罕见的,因此您可能需要考虑它是否真的是做任何事情的最佳方式。

在Python3.x中,您可以
导入运算符
,并使用运算符模块的
eq()
lt()
,等等。。。如果a或b是类对象,则不使用
cmp(),
那么上述答案将有如下编译错误:
例如:a是班级时钟:
cmp中第14行的文件“01_ClockClass_lab16.py”
返回(a>b)-(a”在“Clock”和“Clock”的实例之间不受支持

使用int()更改类型以删除错误:

Traceback (most recent call last):
  File "G:\Dropbox\Code\a = [1,2,3]", line 3, in <module>
    c = cmp(a,b)
 NameError: name 'cmp' is not defined
[Finished in 0.1s]
def cmp(a、b):
return(int(a)>int(b)-(int(a)当需要符号时,最安全的选择可能是使用math.copysign:

import math
ang = -2
# alternative for cmp(ang, 0):
math.copysign(1, ang)

# Result: -1
特别是如果ang是np.float64类型,因为“-”运算符折旧。 例如:

将numpy导入为np
def cmp_0(a、b):
返回(a>b)-(a
相反,我们可以使用:

def cmp_0(a, b):
    return bool(a > b) - bool(a < b)

ang = np.float64(-2)
cmp(ang, 0)
# Result: -1
def cmp_0(a、b):
返回布尔值(a>b)-布尔值(a
如果您想比较两个元组列表,请在
Python3.x
中添加@maxin的答案
a
b

import operator

a = [(1,2),(3,4)]
b = [(3,4),(1,2)]
# convert both lists to sets before calling the eq function
print(operator.eq(set(a),set(b))) #True
cmp()
函数仅适用于Python版本2.x,如果您尝试在版本3.x中使用它,则会出现错误:

NameError: name 'cmp' is not defined
[Finished in 0.1s with exit code 1]
请参阅下面的代码:

a=60
b=90
print(cmp(a,b))
输出:

-1
1
0
当比较整数时,cmp()只执行其参数的减法运算,即在本例中为a-b,如果减法运算为-ve,则返回-1,即ab

输出:

-1
1
0
再次:

a="abc"
b="abc"
print(cmp(a,b))
输出:

-1
1
0

当两个参数相等时,即a=b,它返回0作为输出。这里,我们传递了两个字符串类型的值。在这里,cmp()逐个字符比较两个字符串,如果找到相同的字符串,则返回0。

而在一般情况下,对于原始海报给出的实际用例,这些都是对
cmp()
的很好替代

a = [1,2,3]
b = [1,2,3]
c = a != b
print(c)
或者只是

a = [1,2,3]
b = [1,2,3]
print(a != b)

可以很好地工作。

它在哪些方面不起作用?您使用的是Python 2.x还是3.x?2.x有
cmp()
,但3.x没有。我怀疑3.x是因为
print
后面有括号。我使用了3.x,很抱歉,我更新了文章,让输出在内部。你应该在自定义类中定义比较运算符,而不是将所有内容强制转换为int?可能需要强制转换布尔值,如:def cmp(a,b):return int(a>b)-int(a