import difflib
a='abcd'
b='ab123'
seq=difflib.SequenceMatcher(a=a.lower(),b=b.lower())
seq=difflib.SequenceMatcher(a,b)
d=seq.ratio()*100
print d
我使用了上面的代码,但获得的输出是0.0。我怎样才能得到有效答案?
答案 0 :(得分:39)
你忘记了SequenceMatcher的第一个参数。
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
答案 1 :(得分:17)
来自文档:
SequenceMatcher类有这个构造函数:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
代码中的问题是通过执行
seq=difflib.SequenceMatcher(a,b)
您传递a
作为isjunk
和b
的值作为a
的值,保留''
的默认b
值。这导致0.0
的比率。
克服这种情况的一种方法(Lennart已经提到)是明确地将None
作为额外的第一个参数传递,以便为所有关键字参数分配正确的值。
但是我刚刚找到并希望提及另一个解决方案,它不触及isjunk
参数,而是使用set_seqs()
方法指定不同的序列。
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444