我无法使命令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]
答案 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.x
和a
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)
效果会很好。