我有 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% 还有其他方法可以做到这一点吗?
可以在列表本身之间使用 Levenstein 距离,而不是它们的串联:
lev_dist = distance(list1, list2)
percentaje= 100 * (1 - lev_dist / max(len(list1), len(list2)))
显示
0.6666666666666666