0

我想知道是否有一种pythonic方法可以多次应用一个函数,其中所有最后的结果都是再次使用列表理解或生成器表达式而不是像这样的for循环的输入?

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似乎只考虑最后一个,但不是所有最后一个结果。还有什么想法吗?

4

1 回答 1

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)) 保持运行总和并使用它)

于 2017-11-20T10:55:07.720 回答