python的random模組函數分析(一)

來源:互聯網
上載者:User

標籤:lis   result   top   amp   浮點數   操作   turn   send   none   


random是python產生偽隨機數的模組,隨機種子預設為系統時鐘。下面分析模組中的方法:

1.random.randint(start,stop):

這是一個產生整數隨機數的函數,參數start代表最小值,參數stop代表最大值,兩端的數值都可以取到;

函數演算法時間複雜度: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):
也是一個隨機整數函數,參數可選;

當只有一個參數時,預設隨機範圍0到該參數,前閉後開;兩個參數,最小值和最大值,前閉後開;三個參數,最小值,最大值和步長,前閉後開。

演算法時間複雜度:O(1)
核心原始碼:
return istart + istep*self._randbelow(n)    # 該函數由_randbelow函數封裝得到
例子:

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):

一個隨機播放函數,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():

這個函數形成從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))

 

python的random模組函數分析(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.