我想知道是否有一种pythonic方法可以多次应用函数,其中所有最后结果是使用列表推导或生成器表达式而不是像这样的for循环再次输入?< / p>
import numpy as np
def func(x, s):
return (5+sum(x))**(-1.06)/s
y = np.array([])
for i in range(5):
y = np.append(y, func(y[:i], s=i+1))
编辑:不幸的是,itertools.accumulate
似乎只考虑最后一个,但不是最后的结果。还有什么想法?
答案 0 :(得分:0)
看起来没有内置功能,但它很容易制作:
def pastmap(f, inputs):
"""
:param f: A function of the form y[i] = f(y[:i], inputs[i])
:param inputs: An iterable of inputs
:return: A list of length: len(inputs)
"""
results = []
for x in inputs:
new_result = f(results, x)
results.append(new_result)
return results
def func(x, s):
return (5+sum(x))**(-1.06)/s
y = np.array(pastmap(func, range(1, 6)))
请注意,至少对于您的示例来说,执行此操作非常低效,因为您反复获取增长列表的总和,即O(N^2)
(它会更好( O(N)
)保持运行金额并使用它)