6

我正在尝试 python 的 difflib 模块,我遇到了SequenceMatcher. 因此,我尝试了以下示例,但无法理解发生了什么。

>>> SequenceMatcher(None,"abc","a").ratio()
0.5

>>> SequenceMatcher(None,"aabc","a").ratio()
0.4

>>> SequenceMatcher(None,"aabc","aa").ratio()
0.6666666666666666

现在,根据比例

将序列相似性的度量作为 [0, 1] 范围内的浮点数返回。其中T是两个序列中的元素总数, M是匹配数,这是2.0*M / T

所以,对于我的情况:

  1. T=4所以M=1比例2*1/4 = 0.5
  2. T=5所以M=2比例2*2/5 = 0.8
  3. T=6所以M=1比例2*1/6.0 = 0.33

根据我的理解T = len(aabc) + len(a)M=2因为a进来两次aabc

那么,我在哪里错了我错过了什么。?

这里是源代码SequenceMatcher.ratio()

4

1 回答 1

6

你的第一个案例是对的。在第二种情况下,只有一个afromaabc匹配,所以M = 1。在第三个例子中,两个as 都匹配,所以M = 2。

[PS:你指的是古老的 Python 2.4 源代码。当前源代码位于hg.python.org。]

于 2012-09-15T11:13:26.883 回答