【发布时间】:2018-11-28 06:28:48
【问题描述】:
我正在寻找一种算法,该算法通过将给定的集合重构为模式来减少循环的元组列表。
每个元组包含一个 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'}),]
目标是根据my_dict 中元组的第二个值,尽可能频繁地重新创建模式xyz。查询集不能完全重构的剩余元素应被切断,因此“减少”。
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_1、result_2和result_3共包含:3次x、3次y、3次z。
有人知道如何做到这一点吗?
感谢您的帮助!
【问题讨论】:
标签: python python-3.x algorithm sorting