python - 根据定义的总和限制拆分项目列表
问题描述
我正在寻找以下解决方案:
oList = [400,250,750,800,125,500,550,100]
limit = 1000
list1 = []
nList = []
li = 0
for v in oList:
li += v
if li > limit:
nList.append(v)
list1 = set(oList) - set(nList)
print(list1)
list1 [400, 250]
我正在寻找的是:
list1 [400, 250]
list2 [750]
list3 [800]
list4 [125, 500]
list5 [550, 100]
因此,列表列表就足够了,谢谢。
解决方案
您在正确的轨道上,当前总和确定是否应将元素附加到列表中(重复调用 sum() 会使解决方案变慢)。但是,要获取列表列表,您需要在追加新子列表(并重置总数)或追加到列表列表中的最后一个列表之间进行选择。
你可以这样做:
def splitsum(L,S):
result,t = [[]],0
for n in L:
r,v,t = (result,[n],n) if t+n>S else (result[-1],n,t+n)
r.append(v) # append n to last list or [n] to list of lists
return result
输出:
L = [400,250,750,800,125,500,550,100]
print(splitsum(L,1000))
[[400, 250], [750], [800, 125], [500], [550, 100]]
推荐阅读
- python - 如何从每个节点提取sklearn决策树规则到pandas布尔条件?
- php - PHP 无法上传大于 ~ 6500px 的图片(文件大小无关紧要)
- angularjs - 设置为最小尺寸后无法调整电子窗口的大小
- java - 领域无效类型
- r - 验证单元格值是否对应于 R 中的其他单元格值
- python - 在python中快速替换2个矩阵
- webdriver-io - 使用 webdriver 单击登录按钮时出现以下错误:由于元素单击被拦截,请求失败
- c++ - 散列大键而不会发生冲突
- https - 在使用 KeyCloak 的 JHipster 项目中启用 Https
- unreal-engine4 - 在虚幻引擎4中相互叠加的气缸模拟