2011-01-26 85 views
16
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查找两个字符串之间的相似性?

+0

https://docs.python.org/3/library/difflib.html#sequencematcher-objects – 2017-07-19 12:57:23

回答

27

您忘记了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

+0

嘿漂亮的答案,有没有什么办法让比赛多少? – Mohsin 2017-05-12 13:00:10

13

从文档:

SequenceMatcher类有这样的构造:

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

在你的代码的问题是,这样做

seq=difflib.SequenceMatcher(a,b) 

你逝去的a作为价值isjunkb作为价值a,保留默认''b。这导致了0.0的比率。克服这种

的一种方式(已被提到的伦纳特·)是明确地传递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 
相关问题