2

次のコードを実行しようとしました:(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の2つのインスタンスがすべて等しくなるように、カスタム比較関数を使用しようとしました。しかし、SequenceMatcherを使用して同じ長さのmyintの2つのリストを比較すると、実行されない結果が得られました。

>>> q.ratio()
1:  0.3333333333333333

1.0の代わりに。リストは「myint」タイプのオブジェクトで構成されていましたが、SequenceMatcherは私の比較ではなく数値間の通常の比較を使用していることがわかります。
SequenceMatcherが例外として1.0を返すようにmyintクラスを作成するにはどうすればよいですか?
(またはカスタム比較関数でSequenceMatcherを使用するその他のアイデア)

4

1 に答える 1

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
于 2012-09-30T00:11:02.090 に答える