python隨機模塊22個函數詳解(上)

2021-01-10 CDA數據分析師

作者:小伍哥

來源: AI入門學習

今天給大家介紹下python中的隨機模塊,隨機數可以用於數學,遊戲,安全等領域中,還經常被嵌入到算法中,用以提高算法效率,並提高程序的安全性。平時數據分析各種分布的數據構造也會用到。

random模塊,用於生成偽隨機數,之所以稱之為偽隨機數,是因為真正意義上的隨機數(或者隨機事件)在某次產生過程中是按照實驗過程中表現的分布概率隨機產生的,其結果是不可預測的,是不可見的。而計算機中的隨機函數是按照一定算法模擬產生的,對於正常隨機而言,會出現某個事情出現多次的情況。

但是偽隨機,在事情觸發前設定好,就是這個十個事件各發生一次,只不過順序不同而已。現在MP3的隨機列表就是用的偽隨機,把要播放的歌曲打亂順序,生成一個隨機列表而已,每個歌曲都播放一次。真實隨機的話,會有出現某首歌多放次的情況,歌曲基數越多,重放的概率越大。

注意:random()是不能直接訪問的,需要導入 random 模塊,然後通過 random 靜態對象調用該方法。

import randomimport matplotlib.pyplot as pltimport seaborn as sns

import randomimport matplotlib.pyplot as pltimport seaborn as sns

01 random

描述:random.random() 用於生成一個0到1的隨機符點數: 0 <= n < 1.0

語法:random.random()

#生成一個隨機數random.random()0.7186311708109537#生成一個4位小數的隨機列表[round(random.random(),4) for i in range(10)][0.1693, 0.4698, 0.5849, 0.6859, 0.2818, 0.216, 0.1976, 0.3171, 0.2522, 0.8012]#生成一串隨機數for i in range(10):print(random.random())0.43860556392473480.43944378539770780.2318629636828330.64831689635533420.121065812558118550.70438749865313550.387295196584986230.64922561571703930.4634250509335640.2298431522075462

02 choice

描述:從非空序列seq中隨機選取一個元素。如果seq為空則彈出 IndexError異常。

語法:random.choice( seq)seq 可以是一個列表,元組或字符串。

L = [0,1,2,3,4,5]random.choice(L)2L = 'wofeichangshuai'random.choice(L)'h'

03 choices

描述:從集群中隨機選取k次數據,返回一個列表,可以設置權重。

注意每次選取都不會影響原序列,每一次選取都是基於原序列。

語法:random.choices(population,weights=None,*,cum_weights=None,k=1)

參數:

population:集群。weights:相對權重。cum_weights:累加權重。k:選取次數。a = [1,2,3,4,5]random.choices(a,k=5)[2, 5, 2, 1, 3]random.choices(a,weights=[0,0,1,0,0],k=5)[3, 3, 3, 3, 3]random.choices(a,weights=[1,1,1,1,1],k=5)[3, 1, 5, 2, 2]#多次運行,5被抽到的概率為0.5,比其他的都大random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5, 4, 4, 4, 2]random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5, 4, 5, 5, 2]random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5, 2, 2, 5, 5]random.choices(a,cum_weights=[1,1,1,1,1],k=5)[1, 1, 1, 1, 1]對每一條語句不妨各自寫一個循環語句讓它輸出個十遍八遍的,你就足以看出用法了。結論:參數weights設置相對權重,它的值是一個列表,設置之後,每一個成員被抽取到的概率就被確定了。比如weights=[1,2,3,4,5],那麼第一個成員的概率就是P=1/(1+2+3+4+5)=1/15。cum_weights設置累加權重,python會自動把相對權重轉換為累加權重,即如果你直接給出累加權重,那麼就不需要給出相對權重,且Python省略了一步執行。比如weights=[1,2,3,4],那麼cum_weights=[1,3,6,10],這也就不難理解為什麼cum_weights=[1,1,1,1,1]輸出全是第一。

04 getrandbits

描述:返回一個不大於K位的Python整數(十進位),比如k=10,則結果在0~2^10之間的整數。

語法:random.getrandbits(k)

random.getrandbits(10)379

05 getstate

描述:返回一個捕獲到的 生成器當前內部狀態 的對象,可以將此對象傳遞給 setstate() 恢復到這個狀態。

語法:random.getstate()

06 setstate

描述:state 應該是從之前調用 getstate() 獲得的,而 setstate() 將生成器的內部狀態恢復到調用 getstate() 時的狀態。根據下面的例子可以看出,由於生成器內部狀態相同時會生成相同的下一個隨機數,我們可以使用 getstate() 和 setstate() 對生成器內部狀態進行獲取和重置到某一狀態下。

語法:random.setstate(state)

state = random.getstate()random.random()0.489148634943random.random()0.22359638172661822random.setstate(state)random.random()0.48914863494

07 randint

描述:用於生成一個指定範圍內的整數。

語法:random.randint(a, b),其中參數a是下限,參數b是上限,生成的隨機數n: a <= n <= b

random.randint(1, 8)3random.randint(1, 8)4

08 randrange

描述:按指定基數遞增的集合中 獲取一個隨機數。如:random.randrange(10, 100, 2),結果相當於從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數,random.randrange(10, 100, 2)在結果上與 random.choice(range(10, 100, 2) 等效。

語法:random.randrange([start], stop[, step])

不指定step,隨機生成[a,b)範圍內一個整數。指定step,step作為步長會進一步限制[a,b)的範圍,比如randrange(0,11,2)意即生成[0,11)範圍內的隨機偶數。不指定a,則默認從0開始。#不限制[random.randrange(0,11) for i in range(5)][4, 6, 3, 9, 5]#隨機偶數,運行5個數[random.randrange(0,11,2) for i in range(5)][2, 4, 8, 8, 6]

09 sample

描述:從population樣本或集合中隨機抽取K個不重複的元素形成新的序列。常用於不重複的隨機抽樣。返回的是一個新的序列,不會破壞原有序列。要從一個整數區間隨機抽取一定數量的整數,請使用sample(range(1000000), k=60)類似的方法,這非常有效和節省空間。如果k大於population的長度,則彈出ValueError異常。

語法:random.sample(population, k)

注意:與random.choices()的區別:一個是選取k次,一個是選取k個,選取k次的相當於選取後又放回,選取k個則選取後不放回。故random.sample()的k值不能超出集群的元素個數。

random.sample(range(1000), k=5)[82, 678, 664, 177, 376]L = [0,1,2,3,4,5]random.sample(L,3)[5, 3, 1]random.sample(L,3)[2, 4, 5]

10 seed

描述:初始化隨機數生成器。如果未提供a或者a=None,則使用系統時間為。如果a是一個整數,則作為種子。偽隨機數生成模塊。如果不提供 seed,默認使用系統時間。使用相同的 seed,可以獲得完全相同的隨機數序列,常用於算法改進測試。

語法:random.seed(a=None, version=2)

a = random.Random()a.seed(1)[a.randint(1, 100) for i in range(20)][14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 44, 77, 1, 45, 73, 23, 95, 91, 4]b =random.Random()b.seed(1)[b.randint(1, 100) for i in range(20)][14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 44, 77, 1, 45, 73, 23, 95, 91, 4]

11 shuffle

描述:用於將一個列表中的元素打亂。只能針對可變的序列,對於不可變序列,請使用下面的sample()方法。

語法:random.shuffle(x)

L = [0,1,2,3,4,5]random.shuffle(L)L[5, 4, 1, 0, 3, 2]

相關焦點

  • python之OS模塊39個常用函數詳解
    作者:小伍哥 來源:AI入門學習os,語義作業系統,所以該模塊就是作業系統相關的功能了,用於處理文件和目錄這些我們日常手動需要做的操作,比如新建文件夾、獲取文件列表、刪除某個文件、獲取文件大小、重命名文件、獲取文件修改時間等,該模塊就包含了大量的作業系統操作函數,精選常用的進行解析,希望對大家有所幫助。
  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    羽憶教程最近遇到一個問題,要隨機分配8名老師到3個辦公室中,這時小編想要了python中的隨機函數random來進行分配工作,感覺小編像個月老一樣。python隨機函數python隨機函數在python中,想要生成隨機數
  • python:pop函數詳解 - 二進位01
    pop函數詳解今天我為大家講解python中pop函數的使用。#簡介——pop()函數是python解釋器的內置方法,可作用於列表,字典。用法說明——在builtins.py中找到pop函數。列表:L.pop([index]) -> item -- remove and return item at index (default last).
  • python測試函數模塊unittest
    1.測試函數在編寫完代碼後進行對代碼測試是否有錯誤2.pytho標準庫中的模塊unittest為代碼測試工具例如:name_function.py 模塊名def get_formatted_name(first, last): full_name = first + ' ' + last
  • 玩轉Python 中的隨機數
    開發中我們經常遇到需要隨機數的場景,比如為了用戶密碼更安全我們有時會加鹽,也就是將用戶原密碼連接上一串隨機字符然後加密保存,又比如我們可能需要隨機展示某張圖片等等。今天,我們就來理一理 Python 中的隨機數的玩法,當然,這裡只涉及標準庫。
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1.()該函數也可以添加一個參數,默認為0,表示正常退出,其他參數表示非正常退出,支持用字符串來自定義錯誤信息。
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    變量的計算和輸入輸出 08 變量的命名 09 if判斷語句 10 石頭剪刀布 11 while循環基本使用 12循環嵌套 13 函數的基本使用 14 函數的參數和返回值 15函數的嵌套調用 16模塊的簡介 17列表 18元祖 19字典
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • python入門基礎之lambda匿名函數詳解
    python入門基礎之lambda匿名函數詳解剛開始學習python的時候很多人可能對於lambda函數不了解,感覺和def很混亂,下面我來介紹一下lambda函數我從一下幾個方面來介紹lambda:lambda作為一個表達式,定義了一個匿名函數,上例的代碼x,y為入口參數,x+y為函數體。在這裡lambda簡化了函數定義的書寫形式。python允許用lambda關鍵字創造匿名函數。匿名是不需要以標準的方式來聲明,比如說使用 def 語句。(除非賦值給一個局部變量,這樣的對象也不會在任何的名字空間內創建名字,上面的例子中會創建名字。)
  • Python內置模塊math介紹
    # 導入模塊import math#dir(module):可以通過它查看任何模塊中所包含的工具
  • python中常用模塊詳解
    本次我們的主題是以Python中最常使用的json和pickle模塊為例,深入探討Python在處理此類問題時,模塊的應用範圍和優缺點,本次分為三個章節進行討論。今天,我們詳解pickle模塊的使用。什麼是序列化?簡單來講,就是把一個對象(變量)或者任何形式的數據結構從內存中變成可存儲對象或進行傳輸的過程,我們稱之為序列化。
  • 三分鐘從入門到精通——Python模塊
    中的模塊:假設您正在使用python解釋器。您花了30分鐘來定義一個函數,然後使用它並退出解釋器。但是突然間,您記住仍然需要再次使用該功能。您再次輸入它,但該功能的定義已消失。哎呀,好痛。現在,您再次需要花費30分鐘來鍵入相同的功能。因此,python有一種方法可以將該函數定義放入文件中並隨時使用。模塊是ModuleType類型的對象。
  • 詳解Python隨機數的生成
    ,比如密碼加鹽時會在原密碼上關聯一串隨機數,蒙特卡洛算法會通過隨機數採樣等等。Python內置的random模塊提供了生成隨機數的方法,使用這些方法時需要導入random模塊。下面介紹下Python內置的random模塊的幾種生成隨機數的方法。1、random.random()隨機生成 0 到 1 之間的浮點數[0.0, 1.0)。
  • Python基礎知識:以實例教你學隨機數產生和字符/ASCII碼轉換操作
    實例說明使用Python語言,產生20個「a」-「z」之間的隨機字符序列。基本實現方法1使用python內置的random模塊產生隨機數,我們知道字符「a」和「z」對應的ASCII碼分別為97和122,所以對於題目要求產生「a」-「z」之間的隨機字符序列,只需使用random模塊產生97-122之間的隨機數,然後將其轉換為對應的字符即可。其中,字符轉數字的函數為ord函數,數字轉字符的函數為chr函數。
  • python之shutil模塊11個常用函數詳解
    作者:小伍哥 來源:AI入門學習shutil是 篇python 中的高級文件操作模塊,與os模塊形成互補的關係,os主要提供了文件或文件夾的新建、刪除、查看等方法,還提供了對文件以及目錄的路徑操作。shutil模塊提供了移動、複製、 壓縮、解壓等操作,恰好與os互補,共同一起使用,基本能完成所有文件的操作。是一個非常重要的模塊。
  • Chainlink 可驗證隨機函數詳解
    這樣看似好像概率是50/50,但假設有一名礦工(或礦工聯盟)產量佔區塊總量的三分之一,現在這名礦工決定把區塊哈希值最後一位數是1的優勝區塊全部扔掉,並放棄大約2-3個以太幣的區塊獎勵。這樣一來,這名礦工就能夠將結果是0的概率從50%提升至2/3,導致所有依賴這個方法生成隨機數的智能合約用戶都會遭受損失。如果這樣做可以為這名礦工帶來12-18個以太幣的額外收益,那麼他的選擇在經濟上是合理的。
  • Python學習第128課——在Python中實現醉漢隨機遊走
    【每天幾分鐘,從零入門python編程的世界!】這節我們在2D平面內實現隨機遊走。我們先把原理搞清楚,用代碼實現這個原理。原理分析:我們想像在2D平面內有一個x軸和y軸組成的坐標系,有一個人他是個醉漢,他以(0,0)為原點,隨機遊走,以x和y表示遊走後的坐標值,剛開始x=0,y=0。他每走一步之前,都需要先做一次選擇,選擇往東南西北哪一個方向去走,這個選擇我們需要先引入一個random庫,這是一個可以用來實現隨機數、隨機選擇的庫,用這個庫來實現隨機方向的選擇。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,在提高軟體運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟體的功能及應用領域,減少重複編寫代碼、重複造輪子的工作量,這也充分體現了Python語言作為一種膠水語言所特有的優勢
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,前面多篇文章中已經講了傳遞數值/指針/字符串參數、傳遞結構體參數、傳遞普通數組類型的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。