python - Python:检查是否可以从另一组创建一组
问题描述
我有一组列表:
graphs = [{1, 2, 3}, {4, 5}, {6}]
我必须检查是否input
可以将集合创建为内部集合的总和graphs
。
例如:
input1 = {1, 2, 3, 6} # answer - True
input2 = {1, 2, 3, 4} # answer - False, because "4" is only a part of another set, only combinations of full sets are required
换句话说,里面有集合的所有组合graphs
:
{1, 2, 3}
{4, 5}
{6}
{1, 2, 3, 6}
{1, 2, 3, 4, 5}
{4, 5, 6}
{1, 2, 3, 4, 5, 6}
我需要知道,如果这些组合之一等于input
.
我应该如何正确地遍历graphs
元素以获得答案?如果graphs
更大,找到所有组合会有一些问题。
解决方案
我认为您以错误的方式看待这个问题。我认为最好删除包含您无法使用的元素的任何集合(即{4,5}
在您查找时删除集合{1,2,3,4}
。然后创建union
所有其他集合并查看这是否等于您的输入集合。
这样你就不需要找到所有的组合,首先只需一个(最多) O(n*len(sets)) 消除步骤。
graphs = [i for i in graphs if i.issubset(input1) ]
检查答案:
result = set().union(*graphs) == input1
推荐阅读
- apache - Apache VirtualHost 阻止 Tomcat 连接
- javascript - 在javascript中将字符串值转换为变量引用
- sql - 创建一个 SQL 报告,将聚合表达式的解决方案和子查询的结果视为不同的行
- java - 通过 Jackson 在同一级别上写入多个 JSON 值
- javascript - 即使键码被不同的脚本覆盖,如何获取键码
- html - 用于复杂的两列布局(文本和图像)的 CSS
- reactjs - 布尔更新时条件类名未更新
- visual-studio - 管理 Visual Studio 项目、通过 BimlStudio 进行资产更改、版本控制
- c++ - 标准差 c++ 公式建议
- python - Cython“无法为 cdef 类、结构或联合中的字段分配默认值”