Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何限制使用random.choice()选择列表项的次数_Python_Random - Fatal编程技术网

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

Python 如何限制使用random.choice()选择列表项的次数,python,random,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中实现 创建一个包含所需分发内容的列表并将其洗牌: l = 6*[0] + 4*[1] random.shuffle(l) for i in l: print(L[i

我有一张这样的清单

L = ["bus", "bike"]
我想随机打印列表中的项目

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

例如,如果我想打印
“bus”
6次和
“bike”
4次,有没有办法在Python中实现

创建一个包含所需分发内容的列表并将其洗牌:

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

为了稍微扩展我的评论(很抱歉有点离题,因为我不会在这里详细阐述Python,特别是
random.choice()
),您可以从一个“原语”开始,也就是说,一些原语可以很容易地使用各种方法生成

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

你需要的是p=0.6的a,也就是说,在这两个选项中,一个选项的概率应为0.6,这意味着另一个选项的概率为0.4

有一个简单的方法,叫做。简单如下:

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
这是一个广泛的拒绝方法类的基本示例。这是一个练习,看看这与本文中建议的其他答案有什么关系(或对比)(提示:它们与其他答案有什么关系?)

[1] 顺便说一下,这可以在Python中通过
random.random()
实现



可以随意修改主题以外的内容;)

这是Monte Carlo方法的开始,这是一个丰富的主题,这里的空白太小;)通常,您寻求从离散均匀分布或单位间隔[1]上的连续均匀分布到目标分布的转换。有很多方法可以做到这一点,例如通过直接变换,或拒绝方法,或混合,或马尔可夫链等[1]实际上前者可以从后者生成,因此从数学上讲,您只需要连续一致的一个作为起点。一旦你掌握了如何做到这一点,你已经向前迈出了一大步。你能为OP和未来的访问者解释一下你的答案吗?一般来说,如果答案中包含了对代码意图的解释,以及在不介绍其他人的情况下解决问题的原因,那么答案会更有帮助。(这篇文章至少有一个用户标记过,大概是因为他们认为应该删除没有解释的答案。)
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