<p>构建列表,然后使用<code>random.shuffle()</code>使其随机。例如:</p>
<pre><code>import random
def build_list(params, num):
result = []
for value, prob in params:
count = int(prob * num)
for _ in range(count):
result.append(value)
random.shuffle(result)
return result
</code></pre>
<p>或者,作为列表理解:</p>
^{pr2}$
<p>结果:</p>
<pre><code>>>> build_list([(1,0.2),(2,0.3),(3,0.5)], 10)
[3, 2, 3, 2, 3, 1, 3, 3, 2, 1]
</code></pre>
<p><strong>注意</strong>:因为您指定的是概率,这最多将产生<strong>结果</strong><code>prob * num</code>个结果。。。因为如果不是整数,它会去掉分数:</p>
<pre><code>>>> build_list([(1,0.2),(2,0.25),(3,0.55)], 10)
[3, 3, 2, 2, 3, 1, 1, 3, 3]
</code></pre>
<p>丢失项有50%的几率是<code>2</code>或{<cd4>}。所以有一个警告。在</p>
<p>要解释这一损失,您必须选择:</p>
<ol>
<li>最大的可能性得到额外的价值(并找出一个打破僵局的方法)</li>
<li>通过计算重量随机选择</li>
</ol>
<p>添加随机加权缺失项的示例:</p>
<pre><code>def build_list(params, num):
result = [value for value, prob in params for _ in range(int(prob * num))]
while len(result) < num: # some value lost
roll = random.random() # pick which value
prob_sum = 0
for value, prob in params:
prob_sum += (prob * num) % 1
if prob_sum > roll:
result.append(value)
break
random.shuffle(result)
return result
</code></pre>