Вы можете адаптировать Хорошее решение Марка Дикинсона :
import random
def proportions(n):
dividers = sorted(random.sample(range(1, 100), n - 1))
return [(a - b) / 100 for a, b in zip(dividers + [100], [0] + dividers)]
print(proportions(5))
# [0.13, 0.19, 0.3, 0.34, 0.04]
# or
# [0.31, 0.38, 0.12, 0.05, 0.14]
# etc
Обратите внимание, что предполагается, что "ни одно из значений не меньше 0,01" является фиксированным порогом
ОБНОВЛЕНИЕ : Мы можем обобщить, если мы возьмем обратную величину порога и используем ее для замены жестко закодированных значений 100
в предлагаемом коде.
def proportions(N, T=0.01):
limit = int(1 / T)
dividers = sorted(random.sample(range(1, limit), N - 1))
return [(a - b) / limit for a, b in zip(dividers + [limit], [0] + dividers)]