生成范围内的随机数,直到在 python 中达到该数字的最大值
Generating random numbers in range until a max for that number has been met in python
我正在尝试做一些基本的事情 - 使用范围 0-4 并生成一个 36 数字序列,这样每个值都会生成 9 次。
var trial_init 只是一个包含 36 个零的数组。
我生成了:
trial_seq = []
for i in range(len(trial_init)-1):
while True:
trial_val = random.choice(range(4))
if (trial_seq.count(0) <=9 and trial_seq.count(1) <=9 and trial_seq.count(2) <=9 and trial_seq.count(3) <=9):
break
trial_seq.append(trial_val)
我想我不确定它为什么不起作用。
它应该生成一个数字 0、1、2 或 3,并且如果数字没有被包含在 trial_seq 数组中超过 9 次,它应该将它添加到 trial_seq数组,否则应该生成另一个数,直到生成36个数。
我假设这是 python。
您实际上可以采用另一种方式:生成一个索引集,然后将其中的索引随机分配给四个可能值中的每一个:
trial_seq = [0]*36
indices = range(36)
random.shuffle(indices)
for i in range(36):
trial_seq[indices[i]] = i % 4;
编辑:天哪,有时候我很蠢:
trial_seq = [ i % 4 for i in xrange(36) ]
random.shuffle(trial_seq)
也一样。
我正在尝试做一些基本的事情 - 使用范围 0-4 并生成一个 36 数字序列,这样每个值都会生成 9 次。
var trial_init 只是一个包含 36 个零的数组。
我生成了:
trial_seq = []
for i in range(len(trial_init)-1):
while True:
trial_val = random.choice(range(4))
if (trial_seq.count(0) <=9 and trial_seq.count(1) <=9 and trial_seq.count(2) <=9 and trial_seq.count(3) <=9):
break
trial_seq.append(trial_val)
我想我不确定它为什么不起作用。
它应该生成一个数字 0、1、2 或 3,并且如果数字没有被包含在 trial_seq 数组中超过 9 次,它应该将它添加到 trial_seq数组,否则应该生成另一个数,直到生成36个数。
我假设这是 python。
您实际上可以采用另一种方式:生成一个索引集,然后将其中的索引随机分配给四个可能值中的每一个:
trial_seq = [0]*36
indices = range(36)
random.shuffle(indices)
for i in range(36):
trial_seq[indices[i]] = i % 4;
编辑:天哪,有时候我很蠢:
trial_seq = [ i % 4 for i in xrange(36) ]
random.shuffle(trial_seq)
也一样。