random是python產生僞隨機數的模塊,隨機種子默認爲系統時鐘。下面分析模塊中的方法:python
1.random.randint(start,stop):算法
這是一個產生整數隨機數的函數,參數start表明最小值,參數stop表明最大值,兩端的數值均可以取到;dom
函數算法時間複雜度:O(1)
核心源代碼:
return self.randrange(a, b+1) # 由randrange函數封裝而來
例子:
函數
1 for i in range(20): 2 print(rm.randint(0, 10), end=' ')
2.random.randrange(start,stop,step):
也是一個隨機整數函數,參數可選;spa
當只有一個參數時,默認隨機範圍0到該參數,前閉後開;兩個參數,最小值和最大值,前閉後開;三個參數,最小值,最大值和步長,前閉後開。code
算法時間複雜度:O(1)
核心源代碼:
return istart + istep*self._randbelow(n) # 該函數由_randbelow函數封裝獲得
例子:orm
1 for i in range(10): 2 print(random.randrange(10)) # 產生0到10(不包括)的隨機數
3 print(random.randrange(5,10)) # 產生5到10(不包括)的隨機數
4 print(random.randrange(5,100,5)) # 產生5到100(不包括)範圍內的5的倍數的隨機數
3.choice(seq):blog
一個隨機選擇函數,seq是一個非空的集合,在集合中隨機選擇一個元素輸出,元素的類型沒有限制。
核心源代碼:
i = self._randbelow(len(seq)) # 由_randbelow函數獲得隨機的下標
return seq[i]
時間複雜度:O(1)
例子:字符串
1 list3 = ["wo", "我是", 2, 8, [2, 3]] 2 for j in range(10): 3 print(rm.choice(list3),end=" ")
4.random():get
這個函數造成從0.0到1.0之間的任意浮點數,左閉右開,沒有參數。
例子:
1 for j in range(10): 2 print(rm.random(),end=" ")
5.send(n=None):
一個能夠對隨機數生成器進行初始化的函數,n表明隨機種子;當n=None時,隨機種子爲系統時間,當n爲其餘的數據,如int,str等,則以提供的數據做爲隨機種子,此時生成的隨機數列固定。
例子:
1 rm.seed("hdsfsf") 2 for i in range(20): # 不管啓動多少次程序,輸出的序列不變
3 print(rm.randint(0, 10), end=' ')
6.getstate()和setstate(state):
getstate()函數用來記錄隨機數生成器的狀態,setstate(state)函數用來將生成器恢復到上次記錄的狀態。
例子:
1 tuple1 = rm.getstate() # 記錄生成器的狀態
2 for i in range(20): 3 print(rm.randint(0, 10), end=' ') 4 print() 5 rm.setstate(tuple1) # 傳入參數後恢復以前的狀態
6 for j in range(20): 7 print(rm.randint(0, 10), end=' ') # 兩組輸出的結果同樣
7.shuffle(seq,random=None):
對傳入的集合進行亂序操做。只能針對可變序列,如字符串、列表,對於元組等不可變序列會報錯,random用來選擇亂序操做的方式,如:random=random。
核心源代碼:
for i in reversed(range(1, len(x))): j = randbelow(i+1) x[i], x[j] = x[j], x[i]
時間複雜度:O(n)
例子:
1 list3 = ["wo", "我是", 2, 8, [2, 3]] 2 print(list3) 3 rm.shuffle(list3, random=None) 4 print(list3)
8.sample(population, k):
population參數是一個序列,如列表、元組、集合、字符串等;從集合中隨機抽取K個元素造成新的序列,不會改變原有的序列。
核心源代碼:
for i in range(k): j = randbelow(n) # 使用randbelow函數得到一個隨機整數 while j in selected: # 對取得的隨機數去重 j = randbelow(n) selected_add(j) result[i] = population[j] # 賦值
最壞時間複雜度:O(n*n)
例子:
1 list3 = ["wo", "我是", 2, 8, [2, 3], 2, 2, 8] 2 print(list3) 3 list1 = rm.sample(list3, 4) 4 print(list1)
9.uniform(a, b):
生成參數a到b之間的浮點數的函數,若是a > b,則生成b到a之間的浮點數。
核心源碼:
return a + (b-a) * self.random() # random函數的一個封裝
時間複雜度:O(1)
例子:
1 for i in range(10): 2 print(rm.uniform(10, 1))