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。如何获得有效的答案?

有帮助吗?

解决方案

您忘记了第一个参数到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

其他提示

从文档中:

SuequenceMatcher 课堂有这个构造函数:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top