擅长:python、mysql、java
<p>计算每个元素所需的数量。
创建一个包含您需要的所有元素的列表。
洗牌。例如:</p>
<pre><code>>>> deck = [1]*2 + [2]*3 + [3]*5
>>> deck
[1, 1, 2, 2, 2, 3, 3, 3, 3, 3]
>>> random.shuffle(deck)
>>> deck
[1, 1, 3, 3, 3, 3, 2, 2, 3, 2]
</code></pre>
<p>结合创作序列。。。在</p>
^{pr2}$
<p>输出:</p>
<pre><code>[1, 1, 2, 2, 2, 3, 3, 3, 3, 3]
[1, 3, 3, 3, 2, 3, 1, 3, 2, 2]
</code></pre>
<hr/>
<p>补丁</p>
<p>为了保证列表的长度合适,我们可以采取一种低思想的方法:生成除最后一项之外的所有内容,然后用最后一项填充列表的其余部分。TemporalWolf提出的解决方案总体上是比较好的,但这个方案适用于大多数应用。在</p>
<pre><code>for item in T[:-1]:
deck += [item[0]] * int(round(N*item[1]))
# Use final item to guarantee that the list is the correct length
deck += [T[-1][0]] * (N - len(deck))
</code></pre>
<p>如果N太低,而且很多频率都是0,我们仍然会遇到麻烦。如果最后一个项目的频率较低,而其他项目的汇总次数很多,则此操作也可能失败:如果列表已经太长,则此操作将失败。在</p>