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

时间:2015-01-13 13:08:44

标签: python random

我希望迭代超过100个值并随机选择0或1,但最终得到相同数量的0和1' s

以下代码打印计数:

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

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

3 个答案:

答案 0 :(得分:8)

  1. 使用50 0和50 1创建numbers

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

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

    >>> shuffle(numbers)
    
  4. 注意: shuffle就地清单列表。因此,numbers现在将被洗牌。

答案 1 :(得分:1)

这是一个使用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))

答案 2 :(得分:-1)

那么它并不是真正随机的,但是如果你想以50 1和50 0结束,那么根据剩余的可用位数使用加权。例如。在40 1s和45 0s时,0的概率应为5/15,1的概率应为10/15。