文章目录
经常会用到random里面各种各样的方法,每用到新的就记录下来吧~
1.random()
最最最基本的,基本上该模块的绝大多数函数都基于这个函数,它会生成一个在 [0.0, 1.0) 区间内均匀分布的浮点数
2.randint(a, b)
用来生成 [a,b] 之间的随意整数,包括两个边界值。
3.seed(a=None, version=2)
改变随机数生成器的种子
“伪随机数是以相同的概率从一组有限的数字中选取的…随机数的生成是从种子值开始…”
所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。
Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。
通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed
.因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。
不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
另外需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。
4.uniform(a, b)
返回随机的浮点数 N 满足 a <= N <= b 如果 a <= b ,反之 b <= N <= a
5.random.shuffle(x[, random])
洗牌。之前用的时候还接了一个 List 一直报错,后来才知道它直接在 x 上操作,没有返回值。官方文档建议:shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x))
instead.
6.random.sample(population, k)
从有序列表中选k个作为一个片段返回。(无放回)
7.random.choice(seq)
从一个非空序列选出随机一个元素。seq 泛指 list,tuple,String 等,注意 seq 不能为空,否则会抛出 IndexError 异常
8.random.choices(population, weights=None, *, cum_weights=None, k=1)
依概率从指定序列中(有放回)随机抽取 k 个元素,可以设定 weights 或是 cum_weights 来改变元素权重。一直没搞懂 weights 和 cum_weights 的区别,看这里 Nickil Maveli 的回答就完全懂了。weights 最后也是转换成 cum_weights 来处理的,所以后者会更快一些。
参考资料:
1.随机种子 https://blog.csdn.net/qinglu000/article/details/46119621
2.官方文档 https://docs.python.org/3.6/library/random.html?highlight=random#module-random