使用map并减少?

时间:2017-03-27 18:26:27

标签: python reduce

我写了一个函数mean_normal(n,m,sd),它计算从平均m和标准差sd的正态分布中取得的n个随机选择值的平均值。我想使用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))但是我不太确定这是对的。

1 个答案:

答案 0 :(得分:1)

出于教育目的:

>>> 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))

我把它留作练习。

相关问题