我想连续在列表中添加值。 有没有办法通过使用列表理解来做到这一点?
input_list = [1,2,3,4,5,6]
expected_list = [1,3,6,10,15,21]
这可以通过此功能
完成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)
答案 0 :(得分:7)
您正在寻找accumulate
功能。 Python 3.2及更高版本的itertools
模块中提供了此功能。如果您使用的是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
<强>样本强>
1)Python版本&lt; 3.2(使用您自己的功能)
>> from myscript import accumulate
>> print list(accumulate([1, 2, 3, 4, 5, 6])) # Running sum
>> [1,3,6,10,15,21]
使用列表理解。
>> from myscript import accumulate
>> out_ = [item for item in accumulate([1, 2, 3, 4, 5, 6])]
>> out_
>> [1,3,6,10,15,21]
2) Python版本&gt; 3.2(该功能已经在itertools
模块中,只需使用它:))
>> from itertools import accumulate
>> print(list(accumulate([1, 2, 3, 4, 5, 6])))
使用列表理解。
>> from itertools import accumulate
>> out_ = [item for item in accumulate([1, 2, 3, 4, 5, 6])]
>> out_
>> [1,3,6,10,15,21]
注意强>
如果您想查找累积的产品/部门/等,可以将相应的func
参数传递给accumulate
函数。
>> import operator
>> out_ = [item for item in accumulate([1, 2, 3], func=operator.mul)] # accumulated product.
>> out_
>> [1, 2, 6]
答案 1 :(得分:1)
您可以使用functools.reduce
以及列表理解来获得结果。
>>> from functools import reduce
>>> items = [1,2,3,4,5,6]
>>> [reduce(lambda x,y: x+y, l[:b]) for b in range(1,len(l)+1)]
>>> [1, 3, 6, 10, 15, 21]
答案 2 :(得分:0)
这应该这样做:
import itertools
original_list = [1,2,3,4,5,6]
required_list = [bi for bi in itertools.accumulate(original_list)]
print(required_list)
答案 3 :(得分:0)
如果您想使用列表理解并且不导入任何模块,可以使用以下代码执行此操作:
original_list = [1,2,3,4,5,6]
required_list = [sum(original_list[:val]) for val in range(1,len(original_list)+1)]
输出:
[1, 3, 6, 10, 15, 21]
如果您有任何疑问,可以在下方发表评论。
答案 4 :(得分:0)
您也可以使用enumarate()
a = [1,2,3,4,5,6]
b = [sum(a[:i[0]+1]) for i in enumerate(a)]
print b
[1, 3, 6, 10, 15, 21]
为此问题的另一个解决方案添加此答案