首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如果有重复的列表,如何找到两个列表的交集(实际上,我需要一个交集长度)?

Python:如果有重复的列表,如何找到两个列表的交集(实际上,我需要一个交集长度)?
EN

Stack Overflow用户
提问于 2015-09-24 22:59:47
回答 3查看 737关注 0票数 0

给我这两个列表:

代码语言:javascript
复制
a = ['a','b','c','a','a']
b = ['a','b','d']

我需要计算Jaccard distance = (union- intersect )/union,但是我知道每个列表中都会有重复项,我想对它们进行计数,因此本例中的intersect lenght将为2,Jaccard = (8-2)/8

我该怎么做呢?第一个想法是联合列表,然后一个接一个地删除元素。

更新:可能我不得不更多地强调我需要计算重复项;

以下是我的工作解决方案,但它相当难看:

代码语言:javascript
复制
a = [1,2,3,1,1]
b = [2,1,1, 6,5]

import collections
aX = collections.Counter(a)
bX = collections.Counter(b)

r1 = [x for x in aX if x in bX]
print r1

print sum((min(aX[x], bX[x]) for x in r1))

>>> 3
EN

回答 3

Stack Overflow用户

发布于 2015-09-24 23:10:24

代码语言:javascript
复制
a = ['a','b','c','a','a']
b = ['a','b','d']
c = list(set(b).intersection(a))
['a','b']

备注集将丢弃重复项!

票数 1
EN

Stack Overflow用户

发布于 2015-09-24 23:10:32

要获取两个列表a和b之间的jaccard index,请执行以下操作:

代码语言:javascript
复制
def jaccard_distance(a,b):
    a = set(a)
    b = set(b)
    c = a.intersection(b)
    return float(len(a) + len(b) - len(c)) /(len(a) + len(b))
票数 1
EN

Stack Overflow用户

发布于 2015-09-24 23:17:34

以下是我的工作解决方案,但它相当难看:

代码语言:javascript
复制
a = [1,2,3,1,1]
b = [2,1,1, 6,5]

import collections
aX = collections.Counter(a)
bX = collections.Counter(b)

r1 = [x for x in aX if x in bX]
print r1

print sum((min(aX[x], bX[x]) for x in r1))

>>> 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32764671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档