Gen*_*cos 5 python functional-programming list-comprehension
可能重复:
运行总计的列表理解
我正在尝试编写一个简洁的列表理解语句来创建一个cdf:例如:
print f([0.2, 0.3,0.1,0.4])
[0.2,0.5,0.6,1.0]
Run Code Online (Sandbox Code Playgroud)
标准过程看起来像这样(我想为函数f()写一个列表解析):
def f(probabilities) :
sum = 0
returnList = []
for count in probabilities:
sum +=count
returnList = returnList + [sum]
return returnList
Run Code Online (Sandbox Code Playgroud)
编辑:我找到了一个函数numpy.cumsum().我会检查它是否使用列表推导.
[sum(probabilities[:i+1]) for i in range(len(probabilities))]
Run Code Online (Sandbox Code Playgroud)
但是不要这样做,因为它是O(n ^ 2).Python列表推导不是为此而设计的.使用您已编写的过程代码.
这个操作是如此常见,以至于许多语言(主要是功能性的,但不仅仅是)为它提供抽象,通常使用名称scanl(它类似于reduce中间结果).我们称之为ireduce("迭代减少"):
def ireduce(f, state, it):
for x in it:
state = f(state, x)
yield state
Run Code Online (Sandbox Code Playgroud)
现在使用它:
import operator
def f(probabilities):
return ireduce(operator.add, 0, probabilities)
print(list(f([0.2, 0.3,0.1,0.4])))
# [0.2, 0.5, 0.6, 1.0]
Run Code Online (Sandbox Code Playgroud)