python - 查找共同构成目标列表的最小列表的算法
问题描述
假设我有以下内容:
{
'a': [1, 2, 3],
'b': [1, 5],
'c': [3, 4, 5],
'd': [1, 3, 5],
'e': [4]
}
想要的结果是['a', 'c']
因为我想找到哪些数组合并在一起(并删除重复项)表格[1 , 2, 3, 4, 5]
除了将哪些数组合并在一起形成所需的结果之外,我还想找到要合并的最小数组以获得所需的结果(因为例如也['a', 'd', 'e']
给出了所需的结果,但这['a', 'c']
是一个更好的解决方案)
PS。上面的字典只是一个例子,原来的字典有很多键,每个键都有数百个值。
解决方案
沿着这条线的东西应该起作用。您需要根据您是否希望对其进行排序等进行一些调整。此解决方案假定顺序无关紧要。
从最小到最大打印解决方案:
import itertools
input = {
'a': [1, 2, 3],
'b': [1, 5],
'c': [3, 4, 5],
'd': [1, 3, 5],
'e': [4]
}
solution = [1,2,3,4,5]
for i in range(1,len(input.keys())):
for combination in itertools.combinations(input, i):
pot = list(set(itertools.chain.from_iterable(input[k] for k in combination)))
if pot == solution:
print("This is a solution:", combination)
推荐阅读
- angular - Angular 5 *ngFor SELECT:如果它是第一个选项,如何设置选项?
- java - 在 Dropwizard 0.8.4 中,如何使用 rolesAllowed 注释?
- amazon-s3 - 使用 java sdk 直接在 S3 上存储远程托管图像
- python-2.7 - 如何阻止 pygame 显示不需要的文本符号?
- html - Angular 5 disable a table row
- amazon-web-services - Kafka 和 zookeeper 无法在 AWS ECS 上以稳定的方式连接
- php - 如何从 PHP 中的函数访问 sqlite3-database
- android - Android Studio 3.1.2 中任务 ':app:mergeDebugResources' 的错误执行失败
- selenium - 为什么在 selenium 启动 URL 时 URL 显示为橙色(在 firefox 的地址栏中)
- javascript - 在 Angular5 中包含样式表和脚本的正确方法是什么?