How to generate a list of random numbers so their sum would be equal to a randomly chosen number

前端 未结 3 715
面向向阳花
面向向阳花 2021-01-16 09:53

I want to generate a list of random distribution of numbers so their sum would be equal to a randomly chosen number. For example, if randomly chosen number is 5, the distrib

3条回答
  •  自闭症患者
    2021-01-16 10:30

    In a loop, you could keep drawing a random number between 1 and the remaining sum until you've reached your total

    from random import randint
    def generate_values(n):
        values = []
        while n > 0:
            value = randint(1, n)
            values.append(value)
            n -= value
        return values
    

    A few samples of such a function

    >>> generate_values(20)
    [17, 1, 1, 1]
    >>> generate_values(20)
    [10, 4, 4, 1, 1]
    >>> generate_values(20)
    [14, 4, 1, 1]
    >>> generate_values(20)
    [5, 2, 4, 1, 5, 1, 1, 1]
    >>> generate_values(20)
    [2, 13, 5]
    >>> generate_values(20)
    [14, 3, 2, 1]
    

提交回复
热议问题