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
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码,但获得的输出是0.0.我怎样才能得到有效答案?
Len*_*bro 41
你忘记了SequenceMatcher的第一个参数.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
Run Code Online (Sandbox Code Playgroud)
http://docs.python.org/library/difflib.html
Tim*_*Tim 17
来自文档:
该SequenceMatcher类有此构造函数:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
您的代码中的问题是通过执行
seq=difflib.SequenceMatcher(a,b)
Run Code Online (Sandbox Code Playgroud)
您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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40247 次 |
| 最近记录: |