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

时间:2014-03-18 20:30:29

标签: 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]

7 个答案:

答案 0 :(得分:26)

正如评论中所提到的,{3}在Python 3中不存在。如果你真的想要它,你可以自己定义它:

cmp

取自原始What's New In Python 3.0。它真的很罕见 - 尽管不是闻所未闻 - 它真的需要,所以你可能想要考虑它是否真的是最好的方式来做任何事情#&# 39;重新开始。

答案 1 :(得分:4)

在Python 3.x中,您可以import operator并使用运算符模块的eq()lt()等来代替cmp()

答案 2 :(得分:0)

如果a或b是类对象, 那么以上答案将具有如下编译错误: 例如:a是类时钟:   文件“ 01_ClockClass_lab16.py”,第14行,cmp     返回(a> b)-(a

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

def cmp(a,b):     return(int(a)> int(b))-(int(a)

答案 3 :(得分:0)

当需要符号时,可能最安全的替代方法是使用math.copysign:

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

# Result: -1

特别是如果ang由于'-'运算符的贬值而属于np.float64类型。 示例:

import numpy as np

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

ang = np.float64(-2)
cmp_0(ang, 0)

# Result:
# DeprecationWarning: numpy boolean subtract, the `-` operator, is deprecated, 
# use the bitwise_xor, the `^` operator, or the logical_xor function instead.

相反,可以使用:

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

ang = np.float64(-2)
cmp(ang, 0)
# Result: -1

答案 4 :(得分:0)

如果要比较两个元组列表,请在#include <cstdio> __global__ void test_surface(cudaSurfaceObject_t surfImg,int x, int y, int z){ float test = surf3Dread<float>(surfImg, (int)(x*sizeof(float)), y, z, cudaBoundaryModeZero); printf("%f \n",test); } 中添加到@maxin的答案 python 3.xa

b

答案 5 :(得分:0)

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

当比较整数时,cmp() 只是执行其参数的减法,即在这种情况下 a-b,如果减法是 -ve,则返回 -1,即 ab

a=90
b=60
print(cmp(a,b))

输出:

1

再次:

a="abc"
b="abc"
print(cmp(a,b))

输出:

0

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

答案 6 :(得分: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)

效果会很好。