首页 > 解决方案 > 如何从 Python 中的列表中获取相同的随机样本

问题描述

我有一个小脚本可以从列表中获取随机样本,但是我希望在运行此脚本时始终获得相同的列表。我该怎么做?

我目前的代码如下,但是每次我运行脚本时,我都会得到一个不同的示例。

import random

def SampleWithoutRepetition(population, sampleSize):
    random.seed(100)
    result =  random.sample(set(
        map(lambda attribute: attribute, population)), sampleSize)
    print(f"result: {result}")

population = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

SampleWithoutRepetition(population, 4)

标签: pythonrandom

解决方案


theset()是一个无序容器,它不会保留您的population. 像这样,每次重新实例化集合时,您都会从不同的总体中选择完全相同的样本。改为使用list(),或直接使用

result =  random.sample([x for x in population], sampleSize)

[]扩展中,您可以使用lambda. 因此,您的脚本可能如下所示:

import random
random.seed(100)

def SampleWithoutRepetition(population, sampleSize):
    func = lambda attribute: attribute
    return random.sample([func(x) for x in population], sampleSize)

population = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

print(SampleWithoutRepetition(population, 4))

如果将 保留random.seed在函数中,则每次调用函数时都会返回相同的样本,如果将其放在外部,则每次调用脚本时都会收到相同的样本,如您的问题所要求的那样。


推荐阅读