python - difflib 根据序列的顺序返回不同的比率

标签 python difflib

有谁知道为什么这两个返回不同的比率。

>>> 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/

相关文章:

python - 将 virtualenvwrapper 导入 Powershell 时出错

python - 如何确定 Pandas/NumPy 中的列/变量是否为数字?

python - 如何在数据框中查找相似的术语并将其分组以求和它们的值?

Python Difflib - 如何使用 "Change"Op 获取 SDiff 序列

python - 使用 difflib.get_close_matches() 忽略大小写

python - 计算足球比赛中所有可能的得分方式(递归)

python - 如何使我的 Python 代码更省时?

python - 当感兴趣的列缺少单元格时,如何使用 difflab 创建人工键列来合并两个数据集?

Python 2.7 - 比较两个文本文件并仅写入第一个文件中的唯一值

python - 使用 python 正则表达式避免引号内的模式