我有一套清单:
my_set = [[1, 2, 3], [1, 5], [4, 5, 6], [7, 8]]
我想将这个列表中具有共同元素(至少有一个子集)的所有子集加入到一个子集中:
my_final_set = [[1, 2, 3, 4, 5, 6], [7, 8]]
在这种情况下,元素 1、2、3、4、5、6 必须分组在单个最终子集中,如图所示。我怎样才能用Python做到这一点?
我认为我应该做一些递归方法,但我想不出一种方法来做到这一点。
可以拿两套然后减少:
def get_union(sets):
def _rec(S, B):
A = set(S)
i = 0
while i < len(B):
if A.intersection(B[i]):
A.update(B.pop(i))
A, B = _rec(A, B)
else:
i += 1
return A, B
res = []
while sets:
C, sets = _rec(sets[0], sets[1:])
res.append(list(C))
return res
print(get_union([[1, 2, 3], [1, 5], [4, 5, 6], [7, 8]]))
[[1, 2, 3, 4, 5, 6], [8, 7]]