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?
Create numbers
with 50 0's and 50 1's,
>>> numbers = [0, 1] * 50
Import shuffle
from random
>>> from random import shuffle
shuffle
them
>>> shuffle(numbers)
Note: shuffle
shuffles the list in-place. So, the numbers
will be shuffled now.
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With