iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
自我挑戰組

30天自學 python應用系列 第 17

17python random-2

整數亂數產生
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]


上一篇
16python random
下一篇
18python random 小遊戲
系列文
30天自學 python應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言