Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Randomly select 0 or 1 equal number of times?

Tags:

python

random

I want to iterate over 100 values and select randomly 0 or 1, but end up with equal numbers of 0's and 1's,

The code below prints the counts:

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

The output is:

true_count: 56
false_count: 44

I want the counts to be equal

true_count: 50
false_count: 50

How can I change the code to obtain the desired result?

like image 691
kenny Avatar asked Feb 12 '23 04:02

kenny


2 Answers

  1. Create numbers with 50 0's and 50 1's,

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

    >>> from random import shuffle
    
  3. shuffle them

    >>> shuffle(numbers)
    

Note: shuffle shuffles the list in-place. So, the numbers will be shuffled now.

like image 181
thefourtheye Avatar answered Feb 16 '23 02:02

thefourtheye


Here is a generator-based solution that uses O(1) memory:

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))
like image 44
NPE Avatar answered Feb 16 '23 04:02

NPE