使用地图和减少?

Using map and reduce?

我写了一个函数 mean_normal(n, m, sd) 来计算从正态分布中随机选择的 n 个值的平均值,平均值为 m,标准差为 sd。我想使用 map 和 normalvariate 来生成序列并使用 reduce 来计算平均值,但是我不确定如何执行此操作的语法。这是我目前所拥有的:

from random import normalvariate

average = lambda L: sum(L)/len(L)

mean_normal = lambda n, m, sd: average([normalvariate(m, sd) for i in   range(n)])
print(mean_normal(10, 5, 2))

我知道我通常需要像 list(map(lambda i: ..., range(n)) 这样的东西,但我不太确定那是对的。

出于教育目的:

>>> mean_normal2 = lambda n, m, sd: average(map(lambda _: normalvariate(m, sd), range(n)))
>>> mean_normal2(10, 5, 2)
4.749961072139493

诀窍是忽略 lambda 的参数。但是,您最好使用 itertools:

中的 repeatfunc 食谱之类的东西
def repeatfunc(func, times=None, *args):
    """Repeat calls to func with specified arguments.

    Example:  repeatfunc(random.random)
    """
    if times is None:
        return starmap(func, repeat(args))
    return starmap(func, repeat(args, times))

我把它留作练习。