我很难解决其中一个编程难题。我有一个字典,其中包含项目(由i#表示)和值作为项目的价格。项目可以组合形成组合包。
{('i2', 'i3'): '4', ('i1',): '1',('i1', 'i3', 'i4'): '6.5', ('i3',): '3',('i1', 'i2', 'i3'): '4.5', ('i2',): '2', ('i4',): '4'}
我想返回给定输入项目的最低价格。如果用户从组合包中获得额外的最低价格,则用户不会有任何问题:
有没有人知道如何处理它?使用哪种算法?
谢谢, 苏尼
答案 0 :(得分:2)
使用itertools.combinations()生成x包的组合。然后,检查每个组合是否包含所需项目,并找到价格最低的有效组合。
查找4种不同物品包的所有组合:
d = {('i2', 'i3'): '4', ('i1',): '1',('i1', 'i3', 'i4'): '6.5', ('i3',): '3',
('i1', 'i2', 'i3'): '4.5', ('i2',): '2', ('i4',): '4'}
from itertools import combinations
combos = list(combinations(d, 4)) # you should try combos of different lenghts,
# from 1 to the number of desired items
为了说明,让我们看看其中一个组合。 print combos[0]
给出:
(('i2', 'i3'), ('i1',), ('i1', 'i3', 'i4'), ('i3',))
要获得这个组合的价格:
sum([float(d[item]) for item in combos[0]])
其中14.5
我留给你找到最便宜的合适的组合:)