擅长:python、mysql、java
<p>你可以生成自己的伪随机数——这背后有大量的理论依据,比如<a href="http://en.wikipedia.org/wiki/Pseudorandom_number_generator" rel="nofollow noreferrer">here</a>——当然,无论是在质量还是速度上,你都无法与Python的<code>random</code>“Mersenne twister”(在我指给你的大wikipedia页面的中间解释过),但是为了理解,它是努力吧。或者,你可以得到物理随机数,例如在Linux机器上的<code>/dev/random</code>或<code>/dev/urandom</code>(Windows机器也有自己的接口),一个有更大的物理随机性,另一个有更好的性能。在</p>
<p>一旦你有了(或借用了<code>random</code>;-)一个伪随机(或真随机)数字生成器,从100中随机抽取20个项目仍然是一个有趣的问题。虽然洗牌是一种更通用的方法,但更容易理解的方法可能是,假设您的<code>myrand(N)</code>函数返回一个介于0 included和N excluded之间的随机或伪随机整型:</p>
<pre><code>def pickfromlist(howmany, thelist):
result = []
listcopy = list(thelist)
while listcopy and len(result) < howmany:
i = myrand(len(listcopy))
result.append(listcopy.pop(i))
return result
</code></pre>
<p>我绝对清楚,但我非常希望!-)换句话说:只要需要并且可行,从剩余的项目中随机选择一个(辅助列表<code>listcopy</code>在任何步骤都会给我们“剩余的”,并且由<code>.pop</code>修改而不改变输入参数<code>thelist</code>,因为它是一个浅拷贝)。在</p>