得到所有不相交的集合的并集

2024-09-19 20:42:02 发布

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

我想得到两组frozensets的并集。我只对不相交的frozensets的并集感兴趣。从另一个角度来看,我只对长度等于两个frozensets的总长度的并集感兴趣。理想情况下,我希望忽略任何相互不相交的frozensets,以获得巨大的加速。我希望许多frozensets至少有一个共同的元素。这是我目前为止用python编写的代码。我希望它是尽可能快,因为我与一个大的数据集工作。每个frozensets不超过20个元素,但在一个集合中大约总共有1000个元素。所有数字都将介于0和100之间。如果能让我的程序运行得更快的话,我愿意转换成其他类型,但我不希望有任何重复的元素,顺序也不重要。你知道吗

sets1 = set([frozenset([1,2,3]),frozenset([4,5,6]),frozenset([8,10,11])])
sets2 = set([frozenset([8,9,10]),frozenset([6,7,3])])
newSets = set()
for fset in sets1:
    for fset2 in sets2:
        newSet = fset.union(fset2)
        if len(newSet) == len(fset)+len(fset2):
            newSets.add(frozenset(newSet))

正确的输出是

set(frozenset([1,2,3,8,9,10]),frozenset([4,5,6,8,9,10]),frozenset([8,10,11,6,7,3]))

Tags: in元素forlen感兴趣角度setfrozenset
1条回答
网友
1楼 · 发布于 2024-09-19 20:42:02
sets1 = set([frozenset([1,2,3]),frozenset([4,5,6]),frozenset([8,10,11])])
sets2 = set([frozenset([8,9,10]),frozenset([6,7,3])])




union_ = set()

for s1 in sets1:
    for s2 in sets2:
        if s1.isdisjoint(s2):
            union_.add(s1 | s2)


print(union_)



 {frozenset({3, 6, 7, 8, 10, 11}), frozenset({1, 2, 3, 8, 9, 10}), frozenset({4, 5, 6, 8, 9, 10})}

相关问题 更多 >