生成条目总和的固定值列表

时间:2012-11-27 10:06:08

标签: python sum list-comprehension

我想生成一个n概率列表,其概率总和为1.该列表具有固定大小,但可能是任意大的。因此n可能是11121014100等。我意识到这可能是一个计算挑战排序并且可能没有一种最好的方法可以做到这一点,但我仍然乐意欣赏合理方法的建议。

2 个答案:

答案 0 :(得分:4)

我认为最好的方法是生成所需大小的随机数列表,添加所有数字并将每个数字除以总数:

randlist = [randon.random() for i in range(n)]
total = sum(randlist)
randlist = [i/total for i in randlist]

答案 1 :(得分:1)

与Smetterleen类似,但效率可能略高:

import random
def generate(n):
    unnormalised = [random.random() for _ in range(n)]
    s = sum(unnormalised)
    normalised = map(lambda x: x/s, unnormalised)
    return normalised

值得注意的是,这些都不一定总和精确到1

>>> sum(generate(4))
1.0
>>> sum(generate(4))
1.0
>>> sum(generate(4))
1.0000000000000002
>>> sum(generate(4))
0.9999999999999999
>>> sum(generate(4))
1.0