不是内置的,但是
R(3.4.2)Knuth的“计算机编程的艺术”中的算法(Waterman的“ Reservoir
Algorithm”)很好(在非常简化的版本中):
import randomdef random_line(afile): line = next(afile) for num, aline in enumerate(afile, 2): if random.randrange(num): continue line = aline return line
所述
num, ... in enumerate(..., 2)迭代器产生的序列2,3,4
…的
randrange因此将0的概率为
1.0/num-这与我们必须替换当前选定的行(被引用的算法的样本大小1的特殊情况的概率-
有关正确性==的信息,请参阅Knuth的书,当然,我们还需要足够小的“存储库”来存储内存;-))…以及我们 这样做的 确切概率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)