取保留特定信息的整数之和

2024-05-28 20:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份情报清单

list = [25, 50, 70, 32, 10, 20, 50, 40, 30]

如果整数的和小于99,我想求和(从左到右)。假设我把这个输出写到一个列表中,这个列表应该是这样的:

           #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

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

list0 = [ [(25,50),75], [(70),70], [(32, 10, 20),62], [(50, 40),90], [(30),30] ]

我该怎么做


Tags: 数据结构列表new整数belistwouldbecause
2条回答

您可以使用迭代器:

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)]

你的数据结果是:

[[(25, 50), 75], [(70,), 70], [(32, 10, 20), 62], [(50, 40), 90], [(30,), 30]]

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

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)])

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

[[(25, 50), 75], [(70,), 70], [(32, 10, 20), 62], [(50, 40), 90], [(30,), 30]]

相关问题 更多 >

    热门问题