random.sample真的是随机的吗?

时间:2016-10-07 17:16:14

标签: python python-3.x random

我有一个包含155k个文件的列表。当我random.sample(list, 100)时,虽然结果与前一个示例不同,但它们看起来相似。

是否有更好的random.sample替代方法可以返回随机100个文件的新列表?

folders = get_all_folders('/data/gazette-txt-files')
# get all files from all folders
def get_all_files():
    files = []
    for folder in folders:
        files.append(glob.glob("/data/gazette-txt-files/" + folder + "/*.txt"))

    # convert 2D list into 1D
    formatted_list = []
    for file in files:
        for f in file:
            formatted_list.append(f)

    # 200 random text files
    return random.sample(formatted_list, 200)

2 个答案:

答案 0 :(得分:2)

为了从列表中随机选择元素,使用random.sample足够的目的,不提供真正的随机性,我不知道这是否在理论上是可能的。

random(默认情况下)使用名为Mersenne Twister(MT)的Pseudo Random Number Generator(PRNG),虽然适用于模拟等应用程序(以及从路径列表中挑选等次要内容),由于it is deterministic

这一事实,不应该用于担心安全的领域

这就是为什么Python 3.6还引入secrets.py PEP 506,默认情况下使用SystemRandomurandom)并且能够生成{{3} }}。

当然,最重要的是,即使您使用PRNG或CPRNG生成您的数字,它们仍将是伪随机的。

答案 1 :(得分:-1)

您可能需要为发电机播种。请参阅文档中的here

在获取样本之前,请致电random.seed()