如何从Python中的列表列表中删除超集列表?

apr*_*ori 5 python list nested-lists python-3.x

我有一个Python列表,如下所示:

[[1,2,3],[2,3],[2,4,3],[4,5],[5]]
Run Code Online (Sandbox Code Playgroud)

我想删除所有内部列表,这些列表是另一个内部列表的超集(包含另一个列表的所有元素但包含其他元素的列表).对于上面的示例,删除超集应导致以下结果:

[[2,3],[5]]
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

Oli*_*çon 3

如果一个集合较小,则它只能是另一个集合的子集,因此通过按大小升序迭代集合,我们可以根据先前找到的最小子集检查每个元素,以了解它是否是最小子集。

def get_minimal_subsets(sets):
    sets = sorted(map(set, sets), key=len)
    minimal_subsets = []
    for s in sets:
        if not any(minimal_subset.issubset(s) for minimal_subset in minimal_subsets):
            minimal_subsets.append(s)

    return minimal_subsets

l = [[1,2,3],[2,3],[2,4,3],[4,5],[5]]

print(get_minimal_subsets(l))  # [{5}, {2, 3}]
Run Code Online (Sandbox Code Playgroud)