首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自定义比较功能的SequenceMatcher

具有自定义比较功能的SequenceMatcher
EN

Stack Overflow用户
提问于 2012-09-30 07:31:38
回答 1查看 332关注 0票数 2

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

代码语言:javascript
复制
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列表时,我得到了一个异常的结果:

代码语言:javascript
复制
>>> q.ratio()
1:  0.3333333333333333

而不是1.0。我看到SequenceMatcher使用了数字之间的常规比较,而不是我的比较,尽管列表是由"myint“类型的对象组成的。

我如何编写myint类才能使SequenceMatcher返回1.0?

(或者使用具有自定义比较功能的SequenceMatcher的任何其他想法)

EN

回答 1

Stack Overflow用户

发布于 2012-09-30 08:11:02

看起来你遇到的问题是:

代码语言:javascript
复制
y = [f,e,d]

应该是

代码语言:javascript
复制
y = [d,e,f]

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

代码语言:javascript
复制
>>> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12657415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档