从列表中获取数据

Ope*_*ous 2 python dictionary

我有一本有地点和数量的字典,比如

{'loc1': 1000.0,'loc2': 500.0, 'loc3': 200.0,'loc4': 100.0,'loc5': 50.0, }
Run Code Online (Sandbox Code Playgroud)

现在当我订购时,情景应如下所示,

  • 因为150 quantity 它应该从loc5loc4
  • 因为210 quantity 它应该从loc3loc5
  • 因为1777 quantity 它应该从loc1loc2loc3loc4
  • 因为530 quantity 它应该从loc2loc5.

我不知道如何实现这样的条件,谁能解决它?

Ign*_*ams 7

将数量放入列表中,进行排序.使用bisect找到一个适当的量.计算较低的数量是否可以满足,如果没有,则选择下一个更高的数量.减去选定的数量.如果仍然大于0,请返回bisect步骤.

编辑:

import bisect

qtys = [50, 100, 200, 500, 1000]

def sack(amt, qtys=qtys):
  res = set()
  while amt > 0:
    pivot = bisect.bisect(qtys, amt)
    if sum(qtys[:pivot]) >= amt:
      amt -= qtys[pivot - 1]
      res.add(pivot - 1)
    else:
      if sum(qtys[:pivot + 1]) < amt:
        raise ValueError('Not enough items to fill the sack')
      res.add(pivot)
      amt -= qtys[pivot]
  return res

print sack(150)
print sack(210)
print sack(1777)
print sack(530)
Run Code Online (Sandbox Code Playgroud)

  • 嘿,谢谢你的答案,通过查看你的答案的投票,这似乎是我的问题的解决方案,但作为一个初学者,我不知道如何实现.. (2认同)