python - 如何在集合列表上运行 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)
但没有骰子
解决方案
您的方法中的问题是您针对列表中的每个元素而不是所有其他元素测试列表中的每个元素。由于每个集合都是其自身的子集,因此您将始终获得整个列表作为答案。
尝试这个:
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}]
推荐阅读
- java - 在输出中输入特定日期时,我收到“null”
- nuget - 我可以使用不在 .NET Framework 上的旧版 dll 创建 NuGet 包(或其他包)吗?
- go - 有没有一种优雅的方式以快速失败的方式并行运行带有嵌套包的 Go 模块测试?
- mysql - 将具有自定义架构的 mysql 用户存储添加到 WSO2 身份服务器
- javascript - 无法更改 Vue 组件的对象属性(真正的异常)
- netlogo - 根据 Netlogo 中的属性匹配两种不同的代理类型
- jenkins - 如何使用 Jenkins Github Branch Source 插件指定其他受信任的文件?
- c# - 如何找到每个值在通用类列表中重复多少次?
- excel - Range.Style 因语言而异
- r - 从字符串中删除特定标签 - R