[英]How to add values in a list successively using list comprehension?
我想连续在列表中添加值。 有什么办法可以使用列表理解吗?
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)
您正在寻找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版本<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版本> 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]
您可以将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]
应该这样做:
import itertools
original_list = [1,2,3,4,5,6]
required_list = [bi for bi in itertools.accumulate(original_list)]
print(required_list)
如果要使用列表推导来执行此操作,而又不导入任何模块,则可以使用以下代码来执行:
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]
如果您有任何疑问,可以在下面评论。
您也可以通过使用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]
添加此答案只是该问题的另一种解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.