首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对保留特定信息的ints进行求和

问对保留特定信息的ints进行求和
EN

Stack Overflow用户
提问于 2014-01-03 14:00:04
回答 2查看 43关注 0票数 0

我有一份国家统计局的名单

代码语言:javascript
复制
list = [25, 50, 70, 32, 10, 20, 50, 40, 30]

如果它们的总和小于99,我想对它们进行汇总(从左到右)。假设我将这个输出写到一个列表中,而这个列表应该如下所示:

代码语言:javascript
复制
           #75 because 25+50 = 70. 25+50+70 would be > 99
new_list = [75, 70, 62, 90, 30]
               #70 because 70+32 > 99
                   #62 because 32+10+20 = 62. 32+10+20+50 would be > 99

但这还不是全部。我想把这笔钱也存起来。所以我真正想要的是这样的数据结构:

代码语言:javascript
复制
list0 = [ [(25,50),75], [(70),70], [(32, 10, 20),62], [(50, 40),90], [(30),30] ]

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-03 14:07:16

使用单独的列表来跟踪您的号码:

代码语言:javascript
复制
results = []
result = []
for num in inputlist:
    if sum(result) + num < 100:
        result.append(num)
    else:
        results.append([tuple(result), sum(result)])
        result = [num]
if result:
    results.append([tuple(result), sum(result)])

对于您的示例输入,这将生成:

代码语言:javascript
复制
[[(25, 50), 75], [(70,), 70], [(32, 10, 20), 62], [(50, 40), 90], [(30,), 30]]
票数 1
EN

Stack Overflow用户

发布于 2014-01-03 14:19:27

您可以为此使用迭代器:

代码语言:javascript
复制
l = [25, 50, 70, 32, 10, 20, 50, 40, 30]

def sum_iter(lst):
    s = 0
    t = tuple()
    for i in lst:
       if s + i <= 99:
          s += i
          t += (i,)
       else:
           yield t, s
           s = i
           t = (i,)
    else:
       yield t, s


res = [[t, s] for t, s in sum_iter(l)]

根据您的数据,结果是:

代码语言:javascript
复制
[[(25, 50), 75], [(70,), 70], [(32, 10, 20), 62], [(50, 40), 90], [(30,), 30]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20905336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档