如何在Python中递归地将子集连接到列表中?

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

我有一套清单:

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做到这一点? image

我认为我应该做一些递归方法,但我想不出一种方法来做到这一点。

python recursion set
1个回答
0
投票

可以拿两套然后减少:


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]]

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