如何使用列表推导连续添加列表中的值?

gag*_*eep 0 python list-comprehension

我想连续在列表中添加值.有没有办法通过使用列表理解来做到这一点?

input_list = [1,2,3,4,5,6]
expected_list = [1,3,6,10,15,21]
Run Code Online (Sandbox Code Playgroud)

这可以通过此功能完成

def add_list(input_list):
    required_list =[input_list[0]]
    for item in range(1,len(input_list)):
        required_list.append(required_list[-1] + input_list[item])
    return (required_list)
Run Code Online (Sandbox Code Playgroud)

Abd*_*P M 7

你正在寻找accumulate功能.此功能在itertoolsPython 3.2及更高版本的模块中可用.如果您使用python <3.2,您可以编写自己的函数.

# myscript.py
import operator


def accumulate(iterable, func=operator.add):
    """
    Return an iterator whose items are the accumulated results of a function
    (specified by the optional *func* argument) that takes two arguments.
    By default, returns accumulated sums with :func:`operator.add`.
    """
    it = iter(iterable)
    try:
        total = next(it)
    except StopIteration:
        return
    else:
        yield total

    for element in it:
        total = func(total, element)
        yield total
Run Code Online (Sandbox Code Playgroud)

DEMO

1)Python版本<3.2(使用您自己的函数)

>> from myscript import accumulate
>> print list(accumulate([1, 2, 3, 4, 5, 6])) # Running sum
>> [1,3,6,10,15,21]
Run Code Online (Sandbox Code Playgroud)

使用列表理解.

>> from myscript import accumulate
>> out_ = [item for item in accumulate([1, 2, 3, 4, 5, 6])] 
>> out_
>> [1,3,6,10,15,21]
Run Code Online (Sandbox Code Playgroud)

2)Python版本> 3.2(该功能已经在itertools模块中,只需使用它:))

 >> from itertools import accumulate
 >> print(list(accumulate([1, 2, 3, 4, 5, 6])))
Run Code Online (Sandbox Code Playgroud)

使用列表理解.

 >> from itertools import accumulate
 >> out_ = [item for item in accumulate([1, 2, 3, 4, 5, 6])] 
 >> out_
 >> [1,3,6,10,15,21]
Run Code Online (Sandbox Code Playgroud)

注意

如果要查找累积的乘积/除法/等,可以将相应的func参数传递给accumulate函数.

>> import operator
>> out_ = [item for item in accumulate([1, 2, 3], func=operator.mul)] # accumulated product.
>> out_
>> [1, 2, 6]
Run Code Online (Sandbox Code Playgroud)