help(random.sample)
说“结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本”
选择顺序是什么意思?如果没有选择顺序的要求,结果列表会是什么样子?子切片怎么可能不是有效的随机样本?
Upd据我了解,这意味着结果可能不会以任何方式排序。
help(random.sample)
说“结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本”
选择顺序是什么意思?如果没有选择顺序的要求,结果列表会是什么样子?子切片怎么可能不是有效的随机样本?
Upd据我了解,这意味着结果可能不会以任何方式排序。
random.sample(population, k)
给定一个population
序列,它返回一个长度列表,其中包含从 中k
选择(或选择)的元素population
。选择顺序是指(随机)选择每个元素的顺序。因此,该列表不是按人口中的索引排序的,而是按选择的方式排序的。因此,返回列表的任何子片段也是总体的随机样本。
例子 -
>>> import random
>>> population=[1,2,3,4,5,6,7,8,9,10,11,12,]
>>> ls=random.sample(population,5)
>>> ls
[1, 11, 7, 12, 6]
返回的列表中的元素按它们被选中的顺序排列。所以你可以使用子切片ls
而不会失去随机性
>>> ls[:3]
[1, 11, 7]
如果没有强制选择排序,你可能ls
看起来像
[1,6,7,11,12]
子切片将不是完全随机的,而是受切片长度的限制。例如,最大值不能出现在长度为 3 的子切片中(在这种情况下为[1, 6, 7]
)
完整的帮助字符串是:
random.Random 实例的 sample(self, population, k) 方法从总体序列中选择 k 个唯一的随机元素。
返回一个新列表,其中包含人口中的元素,同时保持原始人口不变。结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。这允许将抽奖获胜者(样本)分成大奖和第二名(子片)。
人口中的成员不必是可散列的或唯一的。如果总体包含重复,则每次出现都是样本中的可能选择。
要在整数范围内选择样本,请使用 xrange 作为参数。这对于从大量人口中采样特别快速且节省空间:sample(xrange(10000000), 60)
以抽奖为例;所有在鼓内滚动的票都是population
,k
是抽出的票数。抽到的所有票的集合是随机的结果sample
。
没有排序,也没有以sample
任何方式改变,它是按照绘制的顺序。如果你想象你参加了一次抽奖,他们先抽了 100 张彩票,然后将它们丢弃,然后开始抽实际彩票,那么中奖彩票的集合仍然sample
是population
. 这相当于取第一个较大的切片sample
。
它的意思是,任何样本的任何子切片仍然是有效的随机样本。
回答您的问题;
选择顺序只是绘制值以组成样本的顺序。
在不确保选择顺序的情况下,可能会以某种方式对样本进行排序。
您可以想象以下代码创建一个随机样本以确保选择顺序:
def sample(population, k):
sample = []
popsize = len(population)-1
while len(sample) <= k:
r = population[random.randint(0, popsize]
if r not in sample:
sample.append(r)
return sample