Не смещенный возврат список n случайных положительных чисел (> =0) так, чтобы их сумма == total_sum

Я или ищу алгоритм или предложение для улучшения моего кода для генерации списка случайных чисел, что их сумма равняется некоторому произвольному числу. С моим кодом ниже, это будет всегда смещаться, поскольку первые числа будут иметь тенденцию быть выше.

Существует ли способ иметь более эффективный выбор числа?

#!/usr/bin/python
'''
  Generate a list of 'numbs' positive random numbers whose sum = 'limit_sum'
'''

import random


def gen_list(numbs, limit_sum):
  my_sum = []
  for index in range(0, numbs):
    if index == numbs - 1:
      my_sum.append(limit_sum - sum(my_sum))
    else:
      my_sum.append(random.uniform(0, limit_sum - sum(my_sum)))

  return my_sum

#test
import pprint
pprint.pprint(gen_list(5, 20))
pprint.pprint(gen_list(10, 200))
pprint.pprint(gen_list(0, 30))
pprint.pprint(gen_list(1, 10))

ВЫВОД

## output

[0.10845093828525609,
 16.324799712999706,
 0.08200162072303821,
 3.4534885160590041,
 0.031259211932997744]

[133.19609626532952,
 47.464880208741029,
 8.556082341110228,
 5.7817325913462323,
 4.6342577008233716,
 0.22532341156764768,
 0.0027495225618908918,
 0.064738336208217895,
 0.028888697891734455,
 0.045250924420116689]

[]

[10]
14
задан dassouki 18 October 2010 в 12:17
поделиться