3 回答
TA贡献1818条经验 获得超7个赞
您能解释一下为什么该输出是意外的吗?将一项loc1
附加到后result
,值qty
将为800
。该行将在下一次迭代时再次new_diff = abs(qty - item[1])
为该项目返回一个最小值(200)loc1
,因此该项目将result
再次添加到该项目。完成后,qty
将是-200
,因此while
循环将终止。如果它们的关联数量小于变量,是否应该仅添加项目qty
?如果是这样,则需要更多逻辑来执行此操作-您可以将for循环更改为:
for item in [x for x in new_list if x[1] <= qty]:
TA贡献1783条经验 获得超4个赞
这就是您想要的:
d={'loc2': 500.0, 'loc3': 200.0, 'loc1': 1000.0, 'loc4': 100.0, 'loc5': 50.0}
from operator import itemgetter
def find_combination(locs,qty):
locs = sorted(d.items(),key=itemgetter(1),reverse=True) #get them in descending order
result = []
for loc,val in locs:
if qty <= 0: #if we've reached the target qty then need to look no further
break
elif qty - val >= 0: #if we can take the val of a location and not go below zero do so
qty -= val
result.append((loc,val))
return result
你什么时候
print find_combination(d,1800)
[('loc1', 1000.0), ('loc2', 500.0), ('loc3', 200.0), ('loc4', 100.0)]
>>>
添加回答
举报