2
help(random.sample)

说“结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本”

选择顺序是什么意思?如果没有选择顺序的要求,结果列表会是什么样子?子切片怎么可能不是有效的随机样本?

Upd据我了解,这意味着结果可能不会以任何方式排序。

4

2 回答 2

4

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]

于 2013-07-26T08:09:59.350 回答
2

完整的帮助字符串是:

random.Random 实例的 sample(self, population, k) 方法从总体序列中选择 k 个唯一的随机元素。

返回一个新列表,其中包含人口中的元素,同时保持原始人口不变。结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。这允许将抽奖获胜者(样本)分成大奖和第二名(子片)。

人口中的成员不必是可散列的或唯一的。如果总体包含重复,则每次出现都是样本中的可能选择。

要在整数范围内选择样本,请使用 xrange 作为参数。这对于从大量人口中采样特别快速且节省空间:sample(xrange(10000000), 60)

以抽奖为例;所有在鼓内滚动的票都是population,k是抽出的票数。抽到的所有票的集合是随机的结果sample

没有排序,也没有以sample任何方式改变,它是按照绘制的顺序。如果你想象你参加了一次抽奖,他们先抽了 100 张彩票,然后将它们丢弃,然后开始抽实际彩票,那么中奖彩票的集合仍然samplepopulation. 这相当于取第一个较大的切片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
于 2013-07-26T08:07:16.807 回答