我有2个Python列表要比较.

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

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

如果我逐项查看,巧合的是,它是0,因为第一个失败了.

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

我try 了三件事:

Element by element

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

在本示例中,这导致0%.

Levenstein distance

我将列表转换为带有连接的字符串并计算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%

Spearman Coef

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% 还有其他方法可以做到吗?

推荐答案

可以计算列表本身之间的Levenshtein距离,而不是它们的级联:

lev_dist = distance(list1, list2)

percentage = 100 * (1 - lev_dist / (len(list1) + len(list2)))

显示66.66666666666666

Python相关问答推荐

在Python中根据id填写年份系列

如何才能将每个组比上一组增加N %?

Flask主机持续 bootstrap 本地IP| Python

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

Polars Dataframe:如何按组删除交替行?

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

即使在可见的情况下也不相互作用

Python中绕y轴曲线的旋转

OR—Tools CP SAT条件约束

PyQt5,如何使每个对象的 colored颜色 不同?'

在np数组上实现无重叠的二维滑动窗口

在ubuntu上安装dlib时出错

如何根据一列的值有条件地 Select 前N组?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

从列表中获取n个元素,其中list [i][0]== value''

OpenCV轮廓.很难找到给定图像的所需轮廓

为什么Python内存中的列表大小与文档不匹配?

Flask运行时无法在Python中打印到控制台

如何将一组组合框重置回无 Select tkinter?

mdates定位器在图表中显示不存在的时间间隔