一尘不染

计算两个列表的相似度

algorithm

我有两个清单:

例如。a = [1,8,3,9,4,9,3,8,1,2,3]和b = [1,8,1,3,9,4,9,3,8,1,2 ,3]

两者都包含整数。整数后面没有任何意义(例如,“ 1”比“ 8”更接近“ 3”)。

我正在尝试设计一种算法来计算两个ORDERED列表之间的相似度。Ordered是此处的关键字(因此,我不能只获取两个列表的集合并计算它们的set_difference百分比)。有时数字确实重复(例如,上面的3、8和9,但我不能忽略重复)。

在上面的示例中,我将调用的函数将告诉我a和b例如约90%相似。我怎样才能做到这一点?编辑距离是我想到的。我知道如何将其与字符串一起使用,但是我不确定如何将其与int列表一起使用。谢谢!


阅读 349

收藏
2020-07-28

共1个答案

一尘不染

您可以使用difflib模块

ratio()
以浮点数形式返回序列相似性的度量,范围为[0,1]。

这使 :

 >>> s1=[1,8,3,9,4,9,3,8,1,2,3]
 >>> s2=[1,8,1,3,9,4,9,3,8,1,2,3]
 >>> sm=difflib.SequenceMatcher(None,s1,s2)
 >>> sm.ratio()
 0.9565217391304348
2020-07-28