Python3-通过循环重构给定集合来减少列表
我正在寻找一种算法,通过将给定的集合重建为模式来减少元组列表 每个元组包含一个id和一个集合,如Python3-通过循环重构给定集合来减少列表,python,python-3.x,algorithm,sorting,Python,Python 3.x,Algorithm,Sorting,我正在寻找一种算法,通过将给定的集合重建为模式来减少元组列表 每个元组包含一个id和一个集合,如(1,{'xy'}) 示例 query = {'xyz'} my_dict = [(1, {'x'}), (2, {'yx'}), (3, {'yz'}), (4, {'z'}), (5, {'x'}), (6, {'y'}), (7, {'xyz'}), (8, {'xy'}), (9, {'x'}),] 目标是尽可能频繁地重新创建模式xyz,给定m
(1,{'xy'})
示例
query = {'xyz'}
my_dict = [(1, {'x'}), (2, {'yx'}), (3, {'yz'}),
(4, {'z'}), (5, {'x'}), (6, {'y'}),
(7, {'xyz'}), (8, {'xy'}), (9, {'x'}),]
目标是尽可能频繁地重新创建模式xyz
,给定my_dict
中元组的第二个值。不能完全重构查询集的剩余元素应被切断,因此“减少”
my_dict
总共包含:6次x
,5次y
,3次z
考虑到my_dict
,有效的解决方案可能是:
result_1 = [(7, {'xyz'}), (8, {'xy'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_2 = [(7, {'xyz'}), (2, {'yx'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_3 = [(7, {'xyz'}), (9, {'x'}), (6, {'y'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
列表中元组的顺序并不重要,为了便于说明,我按照查询模式xyz
的顺序对它们进行了排序
目标
目标是要有一个元组列表,其中查询集中元素的总出现次数分布最均匀
result\u 1
、result\u 2
和result\u 3
总共包含:3次x
、3次y
、3次z
有人知道如何做到这一点吗
谢谢你的帮助 根据您的应用程序上下文,简单的暴力方法可能就足够了:使用 当给定的供应子集(
my_dict.values()
)是给定查询的有效解决方案时,您需要实现一个函数is_solution(query,subset)
,该函数返回True
def find_solutions(query, supply):
for subset in powerset(supply):
if is_solution(query, subset):
yield subset