2024-04-27 01:11:42 发布
网友
我想用公共元素合并集合。例如
input = set([frozenset([1,2,3,4]), frozenset([3,4,5,6,7,8]), frozenset([1,1000]), frozenset([100, 200]), frozenset([100, 300, 400])])
结果:
实现这一目标的有效方法是什么?在
使用内置的set.union()->;仅包含set.intersection()长度大于0的结果。在
解释如何在高层次上实现这个答案。如果你想要一个具体的解决方案,你必须首先表现出你的努力来解决这个问题。在
这是我试过的。首先,我做了一些简单但错误的事情
result = set() while input: r = set(input.pop()) for rr in input.copy(): if rr & r: input.remove(rr) r.update(rr) result.add(frozenset(r))
这段代码的问题是合并可能无法完成,这取决于input.pop()的顺序。假设input={frozenset([0, 1]), frozenset([2,3]), frozenset([1,2])}并且这三个元素被弹出并以这个赋值顺序循环,然后results={frozenset([0,1,2]), frozenset([2,3])}。在
input.pop()
input={frozenset([0, 1]), frozenset([2,3]), frozenset([1,2])}
results={frozenset([0,1,2]), frozenset([2,3])}
然后我实现了答案in this post。它首先建立一个新图的邻接列表,每个节点对应于input的一个frozenset元素。如果两个节点(frozensets)共享公共元素,则它们之间存在边。然后利用深度优先图遍历来寻找新图的连通分量。在
input
frozenset
使用内置的set.union()->;仅包含set.intersection()长度大于0的结果。在
解释如何在高层次上实现这个答案。如果你想要一个具体的解决方案,你必须首先表现出你的努力来解决这个问题。在
这是我试过的。首先,我做了一些简单但错误的事情
这段代码的问题是合并可能无法完成,这取决于
input.pop()
的顺序。假设input={frozenset([0, 1]), frozenset([2,3]), frozenset([1,2])}
并且这三个元素被弹出并以这个赋值顺序循环,然后results={frozenset([0,1,2]), frozenset([2,3])}
。在然后我实现了答案in this post。它首先建立一个新图的邻接列表,每个节点对应于
^{pr2}$input
的一个frozenset
元素。如果两个节点(frozenset
s)共享公共元素,则它们之间存在边。然后利用深度优先图遍历来寻找新图的连通分量。在相关问题 更多 >
编程相关推荐