天天看點

【學習】python每天進步一點點-random

文章目錄

    • 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 來處理的,是以後者會更快一些。

【學習】python每天進步一點點-random
【學習】python每天進步一點點-random

參考資料:

1.随機種子 https://blog.csdn.net/qinglu000/article/details/46119621

2.官方文檔 https://docs.python.org/3.6/library/random.html?highlight=random#module-random

繼續閱讀