如何找到多个子集之间的最大交集(k个集合中n个中最常见的元素)?

问题描述 投票:0回答:1

举个例子:

set_0={0,3,4}
set_1={1,3,4}
set_2={1,5,23,8,24}
set_4={1,2,6,10}
set_5={1,60,34,2}
set_6={1,45,32,4}
set_7={1,6,9,14}
set_8={1,56,3,23}
set_9={1,34,23,3}
all_intersection=set.intersection(set_0,set_1,set_2,set_3,set_4, set_5, set_6, set_7, set_8, set_9)

给出空集。有没有什么方法可以以 Python 方式找到 10 组中 9 组的所有可能组合之间的交集(也许不需要暴力方法)。

对于这个数据集,我希望检索 1。

python-3.x set combinations intersection
1个回答
1
投票

如何找到多个子集之间的最大交集(k个集合中n个中最常见的元素)?

尝试在类

set
上调用交集会导致错误,因为类
set
不是
set()
对象。尽管如此,即使选择适当的集合来形成交集的基础也无法确定元素的频率。这只会告诉您哪些元素属于“所有”集合(如果有)。 Counter模块中的
collections
类可以提供这样的频率。
但是,在 k 个集合中的 n 个集合中,不存在明确的“

共同元素”,因为 k 个集合中的“完全” n 个集合中的所有元素都是“同样”共同的。但是,您可以清楚地确定某个元素在 k 个选定集合中的常见程度。 from collections import Counter set_0 = {0, 3, 4} set_1 = {1, 3, 4} set_2 = {1, 5, 23, 8, 24} set_4 = {1, 2, 6, 10} # you're missing set_3 set_5 = {1, 60, 34, 2} set_6 = {1, 45, 32, 4} set_7 = {1, 6, 9, 14} set_8 = {1, 56, 3, 23} set_9 = {1, 34, 23, 3} my_sets = (set_0, set_1, set_2, set_4, set_5, set_6, set_7, set_8, set_9) # This leads to the empty set you mentioned: all_elements = set().union(*my_sets) elements_shared_among_all_sets = all_elements.intersection(*my_sets) print(f"elements in all sets: {elements_shared_among_all_sets}") # elements in all sets: set() # This counter will show (element, n)-pairs: counter = Counter(element for sub_set in my_sets for element in sub_set) print(f"most common 5 elements: {counter.most_common(5)}") # most common 5 elements: [(1, 8), (3, 4), (4, 3), (23, 3), (2, 2)] # Explicit n out of k example: element = 1 n = counter[element] k = len(my_sets) print(f"{element=} is in {n=} out of {k=} sets.") # element=1 is in n=8 out of k=9 sets

© www.soinside.com 2019 - 2024. All rights reserved.