Python:创建一个列表(N长度),其中所有可能的比例为1,递增d小数点

时间:2015-08-30 22:06:31

标签: python

我想制作一个N长度的浮点数列表,其总和总是1,每个浮点数增加d

例如,让N = 4d = 0.01

期望的结果是这样的:

[0.90, 0.02, 0.03, 0.05]
[0.89, 0.02, 0.03, 0.06]
....
# And continues until all possible sums of 1 with the above settings is reached.
# An individual value CAN NOT = 0

我试图为此考虑一些逻辑,但我需要一些帮助。以前我曾问过类似性质的question,但是使用随机数而不是所有可能的组合。

1 个答案:

答案 0 :(得分:2)

我认为itertools使这很容易:

from itertools import permutations, ifilter

N = 4
d = 0.01
D = int(1/d)   


perms = ifilter(lambda x: sum(x) < D, permutations(range(1,D-1), N-1))
tuples = []
for i in perms:
    tuples.append(i + (D-sum(i),))

mylist = [ [ i*d for i in eachtuple ] for eachtuple in tuples ]

print mylist

我假设d对于某个整数n将是10 ^( - n),但这适用于具有整数倒数的任何东西(0.05和0.2应该有效,但不是0.03)

Floats浮动,你会得到一些浮点错误,你可以用嵌套列表理解中的适当round来控制它。