如果您要从生成器中抽取独立样本,那么会发生的情况正是您所期望的:
In [1]: import random
In [2]: random.seed(1)
In [3]: [random.randint(0, 99) for _ in range(10)]
Out[3]: [13, 84, 76, 25, 49, 44, 65, 78, 9, 2]
In [4]: random.seed(1)
In [5]: [random.randint(0, 99) for _ in range(40)]
Out[5]: [13, 84, 76, 25, 49, 44, 65, 78, 9, 2, 83, 43 ...]
正如你所看到的,前十个数字确实是相同的。
事实是random.sample()
正在抽样无需更换这很碍事。要了解这些算法的工作原理,请参阅油藏取样 http://en.wikipedia.org/wiki/Reservoir_sampling。本质上发生的事情是later样品可以推earlier结果集中的样本。
一种替代方法可能是打乱索引列表,然后取出 10 个或 40 个第一个元素:
In [1]: import random
In [2]: a = range(0,100)
In [3]: random.shuffle(a)
In [4]: a[:10]
Out[4]: [48, 27, 28, 4, 67, 76, 98, 68, 35, 80]
In [5]: a[:40]
Out[5]: [48, 27, 28, 4, 67, 76, 98, 68, 35, 80, ...]