整數亂數產生
random.randrange(stop) / random.randrange(start, stop[, step])
回傳一個 range(start, stop, step) 之中的數值,類似於 choice(range(start, stop, step)) ,可是不會真的做出一個 range object
random.randint(a, b)
回傳一個整數 N (a <= N <= b)
import random
random.seed('foobar')
random.randint(0, 10)
random.randrange(0, 10, 3) # range(0, 10, 3) -> [0, 3, 6, 9]
rnds = [random.randint(0, 10) for _ in range(10)]
rnds
[8, 3, 0, 0, 7, 0, 9, 9, 6, 7]
序列操作
random.choice(seq)
從 seq 之中回傳一個元素,如果 seq 是空的,會回傳 IndexError
*random.choices(population, weights=None, , cum_weights=None, k=1)
回傳從 population 中選取 k 個元素。可以設定 weights 或是 cum_weights 來改變元素的權重,weights [10, 5, 13, 27] 跟 cum_weights [10, 15, 28, 55] 是相同的,此為重置抽樣 (sampling with replacement)
random.shuffle(x[, random])
亂數洗掉 x 中的順序,random 參數可以放入 [0.0, 1.0) 的浮點數。
random.sample(population, k)
回傳長度為 k 且元素唯一的 list,此為非重置抽樣 (sampling without replacement)
重置抽樣、非重置抽樣
Sampling with replacement: 從總體抽出一個元素後,會將該元素放回總體。接著重新抽取,因此有機會抽取到相同的元素
Sampling without replacement: 從總體抽出一個元素後,不會將該元素放回總體。因此不會在次抽到已抽到的元素
import random
random.seed('foobar')
seq = [1, 2, 3, 4, 5]
ranodm.choice(seq)
3
random.choices(seq, k=3) # 重置抽樣,有機會抽到相同的元素
[2, 5]
random.choices(seq, k=3)
[5, 5, 4]
random.sample(seq, k=3) # 非重置抽樣,不會抽到相同的元素
[2, 1, 4]
random.sample(seq, k=3)
[4, 1, 3]
random.shuffle(seq) # 亂數重整 seq 順序
seq
[1, 3, 2, 4, 5]