有谁知道为什么这两个返回不同的比率。
>>> import difflib
>>> difflib.SequenceMatcher(None, '10101789', '11426089').ratio()
0.5
>>> difflib.SequenceMatcher(None, '11426089', '10101789').ratio()
0.625
最佳答案
This给出了匹配工作原理的一些想法。
>>> import difflib
>>>
>>> def print_matches(a, b):
... s = difflib.SequenceMatcher(None, a, b)
... for block in s.get_matching_blocks():
... print "a[%d] and b[%d] match for %d elements" % block
... print s.ratio()
...
>>> print_matches('01017', '14260')
a[0] and b[4] match for 1 elements
a[5] and b[5] match for 0 elements
0.2
>>> print_matches('14260', '01017')
a[0] and b[1] match for 1 elements
a[4] and b[2] match for 1 elements
a[5] and b[5] match for 0 elements
0.4
它看起来好像在第一个序列与第二个序列上尽可能多地匹配,并从匹配项继续。在这种情况下 ('01017', '14260'),右侧匹配在最后一个字符 0 上,因此右侧不可能有更多匹配。在这种情况下('14260', '01017'),1s匹配,0仍然可以在右边匹配,所以找到两个匹配。
我认为匹配算法对于排序序列是可交换的。
关于python - difflib 根据序列的顺序返回不同的比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321669/