如何使用random.choice()限制列表项的选择次数

时间:2015-09-15 20:52:12

标签: python random

我有一个像

这样的清单
L = ["bus", "bike"]

我想随机打印列表中的项目

for i in range(10):
    print "Customer %d uses the %s" % (i, random.choice(L))

例如,如果我想要打印"bus" 6次和"bike" 4次,有没有办法在Python中执行此操作?

3 个答案:

答案 0 :(得分:3)

创建一个包含所需分发的列表并将其随机播放:

l = 6*[0] + 4*[1]
random.shuffle(l)
for i in l:
    print(L[i])

答案 1 :(得分:0)

稍微扩展我的评论(并且抱歉有点偏离主题,因为我不会在Python上解释,尤其不是random.choice()这里),你从一个“原始”开始,即一些{{ 3}}可以使用各种random variable轻松生成。

让我们假设这个原语是“单位区间[0,1]上的均匀分布”,我们用X表示这个。[1]

你需要的是pseudo-random number generators,其中p = 0.6,即在两个选择中,一个应该被分配概率0.6,这意味着另一个给出0.4

这是一个简单的方法,称为Bernoulli distribution。它很简单如下:

Generate a value x of X using the "primitive" PRNG;
Test whether this x is lower than 0.6:
    If it is, output "bus"
    Otherwise, output "bike"
End

这是广泛的拒绝方法的基本例子。这是一个练习,看看这与这篇文章中建议的其他答案(或与之相反)提示(提示:它们与acceptance-rejection method有什么关系?)。

[1]顺便说一句,这可以通过random.random()在Python中完成。

随意修改主题;)

答案 2 :(得分:-1)

import random

l = ['bus', 'bus', 'bus', 'bus', 'bus', 'bus', 'bike', 'bike', 'bike', 'bike']

for i in range(len(l)):
    random.shuffle(l)
    print l[0]
    l.pop(0)