SequenceMatcher具有自定义比较功能

时间:2012-09-29 23:31:38

标签: python

我尝试执行以下代码:(在python中)

from difflib import SequenceMatcher as sm
class myint(int):
    def __cmp__(self , other):
        return 0
    def __eq__(self , other):
        return True

a = myint(1)
b = myint(2)  
c = myint(3)  
d = myint(1)
e = myint(2)
f = myint(3)
x = [a,b,c]
y = [f,e,d]
q = sm(None,x,y)

你可以看到,在这些代码中我尝试使用自定义比较函数,这样myint的每两个实例都是相同的。但是,当我使用SequenceMatcher来比较具有相同长度的myint的列表时,我得到了一个未发布的结果:

>>> q.ratio()
1:  0.3333333333333333

而不是1.0。我看到SequenceMatcher使用数字之间的常规比较而不是我的比较,尽管列表由“myint”类型的对象组成。
如何编写myint类,使得SequenceMatcher将返回1.0,如同exepted?
(或使用带有自定义比较功能的SequenceMatcher的任何其他想法)

1 个答案:

答案 0 :(得分:0)

看起来你遇到的问题是:

y = [f,e,d]

应该是

y = [d,e,f]

进行此更改时,q.ratio()将返回1

>>> from difflib import SequenceMatcher as sm
>>> class myint(int):
...     def __cmp__(self , other):
...         return 0
...     def __eq__(self , other):
...         return True
... 
>>> a = myint(1)
>>> b = myint(2)  
>>> c = myint(3)  
>>> d = myint(1)
>>> e = myint(2)
>>> f = myint(3)
>>> x = [a,b,c]
>>> y = [d,e,f]
>>> q = sm(None,x,y)
>>> q.ratio()
1.0