在列表中查找列表的交集

时间:2015-10-16 08:59:21

标签: python list intersection

Venn Diagram

我知道这个:

set.intersection(*list)

将输出链接图片中以棕色阴影区域。

但是我在尝试以粉红色突出显示该区域时遇到了麻烦

2 个答案:

答案 0 :(得分:0)

你的问题不清楚,但也许你想要这样的事情:

l1 = set([1,2,3,4])
l2 = set([1,2,5])
l3 = set([0,1,3])
pink = l1 & l2 | l1 & l3 | l2 & l3

答案 1 :(得分:0)

如果您想对任意数量的列表执行此操作,则可以计算每个数字包含的列表数。

from collections import Counter
from itertools import chain

my_lists = [range(10), range(2, 20, 2), range(1, 25, 3)]

cntr = Counter(chain(*map(set, my_lists)))
print cntr

现在,如果你想要包括棕色区域的粉红色区域:

>>> print {v for v, cnt in cntr.iteritems() if cnt >= 2}
set([1, 2, 4, 6, 7, 8, 10, 16])

或者如果你想要粉红色区域不包括棕色区域:

>>> print {v for v, cnt in cntr.iteritems() if cnt >= 2}
set([1, 2, 6, 7, 8, 10, 16])