我有一个包含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)
答案 0 :(得分:2)
为了从列表中随机选择元素,使用random.sample
足够的目的,不提供真正的随机性,我不知道这是否在理论上是可能的。
random
(默认情况下)使用名为Mersenne Twister(MT)的Pseudo Random Number Generator(PRNG),虽然适用于模拟等应用程序(以及从路径列表中挑选等次要内容),由于it is deterministic。
这就是为什么Python 3.6
还引入secrets.py
PEP 506,默认情况下使用SystemRandom
(urandom
)并且能够生成{{3} }}。
当然,最重要的是,即使您使用PRNG或CPRNG生成您的数字,它们仍将是伪随机的。
答案 1 :(得分:-1)
您可能需要为发电机播种。请参阅文档中的here。
在获取样本之前,请致电random.seed()
。