两个列表的重叠百分比

2024-04-28 00:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

这更像是一道数学题。假设我在Python中有两个不同大小的列表

listA = ["Alice", "Bob", "Joe"]
listB = ["Joe", "Bob", "Alice", "Ken"]

我想知道这两个列表的重叠百分比是多少。顺序在列表中并不重要。找到重叠是很容易的,我已经看到了其他关于如何做到这一点的文章,但我无法在我的脑海中扩展到找出它们重叠的百分比。如果我按不同的顺序比较列表,结果会有不同吗?做这个最好的方法是什么?


Tags: 方法列表顺序文章bob百分比joealice
3条回答

最大的区别是当两个列表具有完全不同的元素时。所以我们最多有n + m个离散元素,其中n是第一个列表的大小,m是第二个列表的大小。一种措施可以是:

2 * c / (n + m)

其中c是公共元素的数量。可以这样计算百分比:

200.0 * len(set(listA) & set(listB)) / (len(listA) + len(listB))

从主要的观点来看,我想说你可能会问两个明智的问题:

  1. 如果与第一个列表相比,重叠的百分比是多少?一、 与第一个列表相比,公共部分有多大?
  2. 第二个名单也是这样。
  3. 如果与“宇宙”(即两个列表的联合)相比,重叠的百分比是多少?

当然也可以找到其他含义,而且会有很多含义。总之,你应该知道你想解决什么问题。

从编程的角度来看,解决方案很简单:

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))返回不同项的总数(4)。

乘以100得到百分数。

相关问题 更多 >