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)
你正在寻找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)