首页 > 解决方案 > 如何在集合列表上运行 issubset/issuperset 将遍历该列表

问题描述

我试图弄清楚如何识别哪些对象是包含它们的列表中的子集/超集。从而将它们从列表中删除。

if i have list a = [
                  {'john-123'},
                  {'john-123','john-234'},
                  {'john-123','john-234','johnnybegood'}  ]

前两个是最后一个的子集。

我发现了很多关于比较两个不同集合的方法,但不确定如何将其实现到迭代中

我试过这样的事情:

for j in a:
        frequency = sum(j.issubset(b) for b in a)
        print(frequency)

但没有骰子

标签: python

解决方案


您的方法中的问题是您针对列表中的每个元素而不是所有其他元素测试列表中的每个元素。由于每个集合都是其自身的子集,因此您将始终获得整个列表作为答案。

尝试这个:

a = [{1}, {2}, {1,2}, {1,3}, {1,3,4}]

显然,{1,2}并且{1,3,4}不是 中其他集合的子集a

subsets = [b for b in a if any(b.issubset(c) and b != c for c in a)]
print(subsets)
[{1}, {2}, {1, 3}]

推荐阅读