One*_*iot 12 python list similarity overlap
这是一个数学问题而不是其他任何问题.假设我在Python中有两个不同大小的列表
listA = ["Alice", "Bob", "Joe"]
listB = ["Joe", "Bob", "Alice", "Ken"]
Run Code Online (Sandbox Code Playgroud)
我想知道这两个列表有多少重叠百分比.订单在列表中并不重要.找到重叠是很容易的,我已经看过其他关于如何做到的帖子,但我无法在脑海中扩展它以找出它们重叠的百分比.如果我按照不同的顺序比较列表,结果会有不同的结果吗?这样做的最佳方式是什么?
从主要观点来看,我会说你可能会问两个明智的问题:
肯定会发现其他含义,并且会有很多含义.总而言之,你应该知道你想要解决的问题.
从编程的角度来看,解决方案很简单:
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
Run Code Online (Sandbox Code Playgroud)
最大差异是两个列表具有完全不同的元素.所以我们最多有n + m离散元素,其中n第一个列表m的大小是第二个列表的大小.一项措施可以是:
2 * c / (n + m)
Run Code Online (Sandbox Code Playgroud)
c常见元素的数量在哪里.这可以像这样计算为百分比:
200.0 * len(set(listA) & set(listB)) / (len(listA) + len(listB))
Run Code Online (Sandbox Code Playgroud)
>>> len(set(listA)&set(listB)) / float(len(set(listA) | set(listB))) * 100
75.0
Run Code Online (Sandbox Code Playgroud)
我会从不同的项目总数中计算出共同的项目。
len(set(listA)&set(listB)) 返回常见项目(示例中为3)。
len(set(listA) | set(listB)) 返回不重复项的总数(4)。
乘以100,您将得到百分比。