我怎样才能知道Python中2个列表中的巧合。顺序很重要,但是当 1 失败时,其余的不应该失败或者是 0 巧合

问题描述 投票:0回答:1

我有 2 个 python 列表要比较。

list1 = ['13.3. Risk', '13.3.1. Process', 'Change']
list2 = ['Change', '13.3. Risk', '13.3.1. Process']

我想知道元素的顺序有多精确。

如果我逐项进行,那么巧合度为 0,因为第一个失败了。

但是如果你仔细看的话,就会发现第一个元素就失败了。其余的都井然有序。所以巧合,或者更好地解释:准确度/精确度是 66.66%

我尝试了三件事:

逐个元素

coincidences= [i == j for i, j in zip(list1, list2)] 
percentaje= 100 * sum(coincidences) / len(list1)

本例中的结果为 0%。

莱文斯坦距离

我使用连接将列表转换为字符串并计算levenstein距离

from Levenshtein import distance

str1 = ','.join(list1)
str2 = ','.join(list2)

lev_dist = distance(str1, str2)

percentaje= 100 * (1 - lev_dist / max(len(str1), len(str2)))

此结果为 39.80582524271845%

斯皮尔曼系数

from scipy.stats import spearmanr

pos_list1 = {elem: i for i, elem in enumerate(list1)}
range_list2 = [pos_list1 [elem] for elem in list2]

coef, p_valor = spearmanr(list(range(len(list1))), rango_lista2)
print(f'Spearman coef is: {coef}')      

结果为-0.5

所以如你所见,我没有得到预期的 66.66% 还有其他方法可以做到这一点吗?

python list levenshtein-distance custom-lists multiple-matches
1个回答
0
投票

可以在列表本身之间使用 Levenstein 距离,而不是它们的串联:

lev_dist = distance(list1, list2)

percentaje= 100 * (1 - lev_dist / max(len(list1), len(list2)))

显示

0.6666666666666666

© www.soinside.com 2019 - 2024. All rights reserved.