我有一份国家统计局的名单
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] ]我该怎么做?
发布于 2014-01-03 14:07:16
使用单独的列表来跟踪您的号码:
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]]发布于 2014-01-03 14:19:27
您可以为此使用迭代器:
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]]https://stackoverflow.com/questions/20905336
复制相似问题