我希望迭代超过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
如何更改代码以获得所需的结果?
答案 0 :(得分:8)
使用50 0和50 1创建numbers
,
>>> numbers = [0, 1] * 50
>>> from random import shuffle
shuffle
他们
>>> shuffle(numbers)
注意: 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。