2024-04-28 00:15:26 发布
网友
这更像是一道数学题。假设我在Python中有两个不同大小的列表
listA = ["Alice", "Bob", "Joe"] listB = ["Joe", "Bob", "Alice", "Ken"]
我想知道这两个列表的重叠百分比是多少。顺序在列表中并不重要。找到重叠是很容易的,我已经看到了其他关于如何做到这一点的文章,但我无法在我的脑海中扩展到找出它们重叠的百分比。如果我按不同的顺序比较列表,结果会有不同吗?做这个最好的方法是什么?
最大的区别是当两个列表具有完全不同的元素时。所以我们最多有n + m个离散元素,其中n是第一个列表的大小,m是第二个列表的大小。一种措施可以是:
n + m
n
m
2 * c / (n + m)
其中c是公共元素的数量。可以这样计算百分比:
c
200.0 * len(set(listA) & set(listB)) / (len(listA) + len(listB))
从主要的观点来看,我想说你可能会问两个明智的问题:
当然也可以找到其他含义,而且会有很多含义。总之,你应该知道你想解决什么问题。
从编程的角度来看,解决方案很简单:
listA = ["Alice", "Bob", "Joe"] listB = ["Joe", "Bob", "Alice", "Ken"] setA = set(listA) setB = set(listB) overlap = setA & setB universe = setA | setB result1 = float(len(overlap)) / len(setA) * 100 result2 = float(len(overlap)) / len(setB) * 100 result3 = float(len(overlap)) / len(universe) * 100
>>> len(set(listA)&set(listB)) / float(len(set(listA) | set(listB))) * 100 75.0
我会从所有不同的项目中计算出常见的项目。
len(set(listA)&set(listB))返回公共项(示例中为3)。
len(set(listA)&set(listB))
len(set(listA) | set(listB))返回不同项的总数(4)。
len(set(listA) | set(listB))
乘以100得到百分数。
最大的区别是当两个列表具有完全不同的元素时。所以我们最多有
n + m
个离散元素,其中n
是第一个列表的大小,m
是第二个列表的大小。一种措施可以是:其中
c
是公共元素的数量。可以这样计算百分比:从主要的观点来看,我想说你可能会问两个明智的问题:
当然也可以找到其他含义,而且会有很多含义。总之,你应该知道你想解决什么问题。
从编程的角度来看,解决方案很简单:
我会从所有不同的项目中计算出常见的项目。
len(set(listA)&set(listB))
返回公共项(示例中为3)。len(set(listA) | set(listB))
返回不同项的总数(4)。乘以100得到百分数。
相关问题 更多 >
编程相关推荐