random隨機(jī)模塊
代碼實(shí)現(xiàn)的隨機(jī)實(shí)際上都是偽隨機(jī)孩锡,都是按照某種規(guī)則實(shí)現(xiàn)的隨機(jī)员帮,既然是按照某種規(guī)則,實(shí)際上就有跡可循幽歼,是一種偽隨機(jī)
返回0-1之間的隨機(jī)浮點(diǎn)數(shù),左閉右開(kāi)
print(random.random())
返回兩個(gè)整數(shù)之間的隨機(jī)整數(shù)谬盐,閉區(qū)間
print(random.randint(1, 5))
random.choice(seq)返回一個(gè)列表甸私,元組或字符串的隨機(jī)項(xiàng)
從非空序列中隨機(jī)選取一個(gè)數(shù)據(jù)并返回,該序列可以是list飞傀、tuple皇型、str、set
ls = ('a', 'b', 'v', 'c', '10')
print(random.choice(ls))
2.random.choices(population,weights=None,*,cum_weights=None,k=1)函數(shù)
population:是指定的序列砸烦,可以是列表弃鸦、元組、字符串等幢痘。
weights:相對(duì)權(quán)重唬格。
cum_weights:累加權(quán)重。
k:選取次數(shù)。
作用:從指定的序列中隨機(jī)選取k次數(shù)據(jù)购岗,返回一個(gè)列表汰聋,可以設(shè)置權(quán)重。
注意:每次選取都不會(huì)影響原序列喊积,每一次選取都是基于原序列烹困。
舉例:
import random
a = [1,2,3,4,5]
print(random.choices(a,k=6))
解析:重復(fù)6次從列表a中的各個(gè)成員中選取一個(gè)數(shù)輸出,各個(gè)成員出現(xiàn)概率基本持平乾吻。
結(jié)果:[5, 4, 5, 4, 1, 3](隨機(jī)生成的)
print(random.choices(a,weights=[0,0,1,0,0],k=6))
解析:重復(fù)6次從列表a中提取3髓梅,最終得到[3, 3, 3, 3, 3, 3]
結(jié)果:[3, 3, 3, 3, 3, 3](固定結(jié)果)
print(random.choices(a,weights=[1,1,1,1,1],k=6))
解析:重復(fù)6次從列表a中的各個(gè)成員中選取一個(gè)數(shù)輸出,各個(gè)成員出現(xiàn)概率基本持平绎签。
結(jié)果:[5, 4, 3, 5, 4, 3](隨機(jī)生成的)
print(random.choices(a,cum_weights=[1,1,1,1,1],k=6))
結(jié)果:[1, 1, 1, 1, 1, 1](固定結(jié)果)
1
2
3
4
5
6
7
8
9
10
11
12
13
可以自己多輸出幾次看看規(guī)律女淑。
結(jié)論:
參數(shù)weights設(shè)置相對(duì)權(quán)重,它的值是一個(gè)列表辜御,設(shè)置之后鸭你,每一個(gè)成員被抽取到的概率就被確定了。
比如weights=[1,2,3,4,5],那么第一個(gè)成員的概率就是P=1/(1+2+3+4+5)=1/15擒权。
cum_weights設(shè)置累加權(quán)重袱巨,Python會(huì)自動(dòng)把相對(duì)權(quán)重轉(zhuǎn)換為累加權(quán)重,即如果你直接給出累加權(quán)重碳抄,
那么就不需要
給出相對(duì)權(quán)重愉老,且Python省略了一步執(zhí)行。
比如weights=[1,2,3,4],那么cum_weights=[1,3,6,10]
這也就不難理解為什么cum_weights=[1,1,1,1,1]輸出全是第一個(gè)成員1了剖效。