如何更改实例的__cmp__函数(不在类中)?
例如:
class foo:
def __init__(self, num):
self.num = num
def cmp(self, other):
return self.num - other.num
# Change __cmp__ function in class works
foo.__cmp__ = cmp
a = foo(1)
b = foo(1)
# returns True
a == b
# Change __cmp__ function in instance that way doesnt work
def cmp2(self, other):
return -1
a.__cmp__ = cmp2
b.__cmp__ = cmp2
# Raise error
a == b
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: cmp2() …Run Code Online (Sandbox Code Playgroud) 我正在使用Python3,但脚本与此版本不兼容,我遇到了一些错误.现在我的cmp参数有问题.这是代码
def my_cmp(x,y):
counter = lambda x, items: reduce(lambda a,b:a+b, [list(x).count(xx) for xx in items])
tmp = cmp(counter(x, [2,3,4,5]), counter(y, [2,3,4,5]))
return tmp if tmp!=0 else cmp(len(x),len(y))
for i, t in enumerate([tmp[0] for tmp in sorted(zip(tracks, self.mapping[idx][track_selection[-1]].iloc[0]), cmp=my_cmp, key=lambda x:x[1])]):
img[i,:len(t)] = t
Run Code Online (Sandbox Code Playgroud)
我真的很感激如何在Python3中处理这个错误.
所以我有一个问题,我该如何排序这个列表:
['Pera','mela','arancia','UVA']
像这样:
['arancia','mela','Pera','UVA']
在练习中,它说使用sorted()带有 cmp 参数的函数。
我正在尝试对列表进行排序,将所有0移到列表的末尾.示例:[0,1,0,2,3,0,4] - > [1,2,3,4,0,0,0]
我看到有人在一行编码
list.sort(cmp=lambda a,b:-1 if b==0 else 0)
Run Code Online (Sandbox Code Playgroud)
但我不明白括号内的意思.
有谁能告诉我?谢谢.
我看到以下代码的结果,但我不明白or在下面的sort例子中知道该怎么做:
use Data::Dumper;
$animals{'man'}{'name'} = 'paul';
$animals{'man'}{'legs'} = 2;
$animals{'cheeta'}{'name'} = 'mike';
$animals{'cheeta'}{'legs'} = 3;
$animals{'zebra'}{'name'} = 'steve';
$animals{'zebra'}{'legs'} = 4;
$animals{'cat'}{'name'} = '';
$animals{'cat'}{'legs'} = 3;
$animals{'dog'}{'name'} = '';
$animals{'dog'}{'legs'} = 4;
$animals{'rat'}{'name'} = '';
$animals{'rat'}{'legs'} = 5;
@animals = sort {
$animals{$a}{'name'} cmp $animals{$b}{'name'}
or $animals{$a}{'legs'} <=> $animals{$b}{'legs'}
} keys %animals;
print Dumper(\@animals);
Run Code Online (Sandbox Code Playgroud) 给定如下文件:-
01/09/2005
02/09/2005
03/09/2006
03/09/2006
Run Code Online (Sandbox Code Playgroud)
我希望比较最后两行是否相同,如果相同则返回 1,否则返回 0。
我可以使用最后两个 cat tail -2
我在每次迭代时递减RAX.如果RAX为零,程序应该改变流程.
# AT&T syntax
start_calc_factorial:
decq %rax
cmpq $0, %rax
je quit_calc_factorial
mulq %rcx
jmp start_calc_factorial
Run Code Online (Sandbox Code Playgroud)
但是,该程序永远不会终止.调试器告诉我RAX的值为0xa0257c7238581842(它可能是下溢的,但它不应该因为je指令).RAX的初始值为7.
可能是什么问题呢?
cmp file1 file2文件相同时什么都不做.那么如何在shell脚本中打印出相同的文件呢?
因此,我首先要说的是这是一门课程,我假设如果cmp返回一些奇怪的信息,教授将不会真正在意它们是否相同。我正在尝试将我的名为uout的代码的输出与正确的输出(在correct0文件中)进行比较。但是,问题在于它返回“ cmp:uout上的EOF”。通过一点点挖掘,我发现EOF表示它们在较短文件的末尾都是相同的,而较短文件是以EOF命名的文件,因此我从中收集到的是它们是相同的,直到uout结束为止。然而问题是,它绝对不会以短时间结束。在文本编辑器中打开并手动检查空格,行号和列号等时,所有内容都完全匹配。
为了说明我的观点,这里是使用ctrl-a + ctrl-v直接复制的文件:
正确0 http://pastebin.com/Bx7SM7rA
uout http://pastebin.com/epMFtFpM
如果有人知道出了什么问题并且可以简单地解释,我将不胜感激。我已经检查了多次,找不到任何问题。也许这很简单,我只是看不到它,但是到目前为止,我所看到的一切似乎都表明文件是相同的,直到“较短的文件”结束为止,而且即使我将执行从
cmp correct0 uout
Run Code Online (Sandbox Code Playgroud)
至
cmp uout correct0
Run Code Online (Sandbox Code Playgroud)
两个实例最终都返回
cmp: EOF on uout
Run Code Online (Sandbox Code Playgroud) IA32至Y86
ATT大会
我有以下IA32汇编代码:
Bubble:
.LFB0:
pushl %esi
pushl %ebx
movl 16(%esp), %esi
movl 12(%esp), %edx
subl $1, %esi
andl %esi, %esi
jle .L1
.L7:
xorl %eax, %eax
.L5:
movl 4(%edx,%eax,4), %ecx
movl (%edx,%eax,4), %ebx
cmpl %ebx, %ecx
jge .L4
movl %ebx, 4(%edx,%eax,4)
movl %ecx, (%edx,%eax,4)
.L4:
addl $1, %eax
cmpl %eax, %esi
jg .L5
subl $1, %esi
jne .L7
.L1:
popl %ebx
popl %esi
ret
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其转换为Y86汇编代码.我在翻译比较指令时遇到问题:
cmpl %ebx, %ecx
Run Code Online (Sandbox Code Playgroud)
谢谢.