Python从集合编号中随机分配列表

时间:2014-11-07 17:15:19

标签: python list random

我要做的是制作一个列表,其中填充了不同的数字组合(不是偶数),这些组合都加起来是预先定义的数字。

例如,如果我有一个变量total = 50以及一个包含7个数字的列表,每次我在循环中生成并打印列表时,结果将完全不同,其中一些是巨大的,其他的近空或空。我不希望对值的范围有任何限制(可以是0或整个50,下一次甚至可以全部平衡)。

这可能吗?

由于

编辑:我已经到了这里,但似乎优先考虑结局,我怎样才能让每个变量都有相同的高或低数字?

`import random
tot = 50
size = 7
s = 0
run = 7
num = {}
while run > 0:
    num[run] = random.randint(s,tot)
    tot -= num[run]
    run -= 1
print(str(num))
`

2 个答案:

答案 0 :(得分:1)

免责声明:我不介意这段代码是什么意思。

from random import randint, seed
seed(345)

def bizarre(total, slots):
    tot = total
    acc = []
    for _ in range(slots-1):
        r = randint(0,tot)
        tot -= r
        acc.append(r)
    acc.append(total-sum(acc))
    return acc

# testing code

for i in range(10):
    tot = randint(50,80)
    n   = randint(5,10)
    b = bizarre(tot, n)
    print "%3d %3d  %s -> %d" % (tot, n, b, sum(b))

输出

 73   5  [73, 0, 0, 0, 0] -> 73
 54   6  [36, 5, 9, 0, 3, 1] -> 54
 60   7  [47, 6, 6, 1, 0, 0, 0] -> 60
 69   7  [3, 48, 15, 3, 0, 0, 0] -> 69
 72   8  [36, 18, 18, 0, 0, 0, 0, 0] -> 72
 65   8  [17, 32, 13, 3, 0, 0, 0, 0] -> 65
 54   7  [33, 13, 0, 2, 4, 1, 1] -> 54
 54   6  [7, 11, 26, 3, 5, 2] -> 54
 67   7  [62, 5, 0, 0, 0, 0, 0] -> 67
 67   8  [28, 25, 1, 0, 10, 3, 0, 0] -> 67

答案 1 :(得分:0)

如果你想要一个n个随机数的列表,它们加起来变量x,那就创建n-1个随机数。然后最后一个数字是x和n-1个随机数之间的差值。例如,如果您想要一个大小为3的列表,最多可添加5个随机创建两个数字,1和2. 1 + 2 = 3,5-3 = 2,因此列表为1,2,2。