将所有列表元素汇总到新列表

时间:2016-09-16 13:52:31

标签: python list python-3.x

我有一个旧列表,我想将每个元素总结为一个新列表:

    lst_old = [1, 2, 3, 4, 5]
    lst_new = [1, 3, 6, 10, 15]

有没有一种优雅的方法在Python 3中使用短代码和快速代码实现它?除了只显示最后一个元素的sum(),我无法找到解决问题的正确方法。

3 个答案:

答案 0 :(得分:7)

您可以使用itertools.accumulate,例如:

from itertools import accumulate

lst_old = [1, 2, 3, 4, 5]
lst_new = list(accumulate(lst_old))
# [1, 3, 6, 10, 15]

答案 1 :(得分:1)

Jon Clements提到的

itertools.accumulate是最好的方法。但是,如果您想要一种明确的方法,请执行以下操作:

lst_old = [1, 2, 3, 4, 5]
sum = 0
lst_new = []
for item in lst_old:
    sum += item
    lst_new.append(sum)

这样做的主要优点是,您可以将其包装在函数中,如果需要执行任何转换或验证,则可以添加。

例如,假设您想要在限制之后停止该功能继续运行,以下内容将有所帮助:

def accumulate_items(lst_old, limit=0):
    sum = 0
    output_list = []
    for item in lst_old:
        sum += item
        output_list.append(sum)
        if limit and sum > limit:
            break
    return output_list

如果需要在此处进行任何转换或操作,灵活性将是无限的。有一个需要设置的先决条件?前进。有一个需要测试的后置条件?前进。非常庞大的列表,并希望像itertools.accumulate一样基于生成器的解决方案?前进。需要添加验证或异常处理吗?来吧。

然而,没有转变而只是积累?以前的答案是最好的。使用与列表索引的和非常慢,因为复杂性的天空火箭的顺序。

答案 2 :(得分:-1)

您可以使用listname [start:end]获取列表片段的总和,以start和end作为可选参数(默认为列表的开头和结尾):

lst_old = [1, 2, 3, 4, 5]
lst_new = []

for i, num in enumerate(lst_old):
    index = i+1
    var = sum(lst_old[:index])
    print(var)
    lst_new.append(var)