文章目錄
-
- 1.random()
- 2.randint(a, b)
- 3.seed(a=None, version=2)
- 4.uniform(a, b)
- 5.random.shuffle(x[, random])
- 6.random.sample(population, k)
- 7.random.choice(seq)
- 8.random.choices(population, weights=None, *, cum_weights=None, k=1)
經常會用到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 來處理的,是以後者會更快一些。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4dGVONTW610MNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2QTM1ATOxgTM3AjMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
參考資料:
1.随機種子 https://blog.csdn.net/qinglu000/article/details/46119621
2.官方文檔 https://docs.python.org/3.6/library/random.html?highlight=random#module-random