繁体   English   中英

随机选择0或1次相等的次数?

[英]Randomly select 0 or 1 equal number of times?

我想迭代超过100个值并随机选择0或1,但最终得到相同数字的0和1,

下面的代码打印计数:

import random
c_true = 0
c_false = 0

for i in range(100):
    a = random.getrandbits(1)
    if a == 1:
        c_true += 1
    else:
        c_false += 1

print "true_count:",c_true
print "false_count:",c_false

输出是:

true_count: 56
false_count: 44

我希望计数是平等的

true_count: 50
false_count: 50

如何更改代码以获得所需的结果?

  1. 创建numbers与50 0和50 1的,

     >>> numbers = [0, 1] * 50 
  2. random导入shuffle

     >>> from random import shuffle 
  3. shuffle他们

     >>> shuffle(numbers) 

注意: shuffle将列表shuffle 所以,这些numbers现在将被洗牌。

这是一个使用O(1)内存的基于生成器的解决方案:

import random

def gen_boolean_seq(true_count, false_count):
   while true_count or false_count:
      val = (random.random() >= false_count / float(true_count + false_count))
      if val:
         true_count -= 1
      else:
         false_count -= 1
      yield val

print sum(gen_boolean_seq(50, 50))

那么它并不是真正随机的,但是如果你想最终得到50个1和50个0,那么根据剩余的可用位数使用加权。 例如。 在40 1s和45 0s,0的概率应该是5/15,1的几率应该是10/15。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM