34
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。我怎样才能得到一个有效的答案?

4

2 回答 2

52

您忘记了 SequenceMatcher 的第一个参数。

>>> import difflib
>>> 
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444

http://docs.python.org/library/difflib.html

于 2011-01-26T07:26:43.243 回答
22

从文档:

SequenceMatcher类有这个构造函数:

class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

你的代码中的问题是通过做

seq=difflib.SequenceMatcher(a,b)

您将a作为isjunkb的值传递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
于 2014-06-05T14:48:29.013 回答