1. 程式人生 > 程式設計 >Python中random模組常用方法的使用教程

Python中random模組常用方法的使用教程

前言

Python 的random模組包含許多隨機數生成器。

random是Python標準庫之一,直接匯入即可使用。本文介紹random中常用方法的用法。

一、生成隨機的整數

# coding=utf-8
import random
 
 
print(random.randint(1,5))
print(random.randrange(0,51,5))

執行結果:

3
40

randint(start,end)會返回一個start到end之間的整數,這裡是左閉右閉區間。也就是說可能會返回end值,在Python中,這個是一個比較特殊的地方,一般來說都是左閉右開的區間。

randrange(start,end,step)返回一個range(start,step)生成的列表中的隨機一個值。這裡是左閉右開區間,如果上面程式碼的51如果換成50,則不可能返回50。

每次執行的結果是不同的,因為是隨機返回其中一個。

二、生成隨機的小數

print(random.random())
print(random.uniform(2,5))

執行結果:

0.49541524802465897
2.948656863619216

random()返回0到1之間的任意一個浮點數。

uniform(start,end)返回start到end之間的任意一個浮點數,其實就是將random()的結果乘(end-start),程式碼就是這麼實現的。

三、從字串、列表、元組中隨機返回一個值

choice_str = 'python'
print(random.choice(choice_str))
choice_list = [i for i in range(1,6)]
print("choice_list: ",choice_list)
print(random.choice(choice_list))
choice_tuple = (10,20,30,40,50)
print(random.choice(choice_tuple))

執行結果:

h
choice_list: [1,2,3,4,5]
5
20

choice()返回可迭代物件中的一個值。可以是列表、元組、字串,不能是字典和集合。

四、從字串、列表、元組中隨機返回一次或多次,且設定權重

choice_list = [i for i in range(1,choice_list)
print(random.choices(choice_list))
choice_tuple = (10,50)
print(random.choices(choice_tuple,k=2))
choice_str = 'python'
print(random.choices(choice_str,weights=[0.5,0.5,0],k=7))
print(random.choices(choice_str,cum_weights=[0,1,1],k=7))

執行結果:

choice_list: [1,5]
[4]
[20,50]
['t','p','t','t']
['h','y','h','y']

choices(population,weights=None,cum_weights=None,k=1)從可迭代物件中返回一次或多次值,返回結果是一個列表。

weights是每一個值對應的權重列表,預設是None,所有元素權重相等。傳入權重列表時,列表長度必須與可迭代物件的長度相等,值與權重按索引一一對應。傳入的值可以是任何數字,只要能對比出不同值之間的權重大小就可以,系統會按權重大小來計算返回每個值的可能性,如上面的例子中只會返回“python”中的p和t,因為其他字元的權重為0。

cum_weights是每一個值對應的累計權重列表,預設是None,所有元素權重相等。傳入權重列表時,列表長度必須與可迭代物件的長度相等。權重是累計的,每一個位置的累計權重是前面所有元素的權重之和加上當前位置元素的權重,也就是說這個列表後面的值不可能小於前面的值。系統會根據累計權重值計算出每個元素的權重,然後計算返回每個值的可能性,如上面的例子中只會返回“python”中的y和h,因為其他字元的權重是0。

注意:weights和cum_weights不能同時有值,即使計算結果一樣。

k值是從可迭代物件中獲取值的次數,每次只取其中的一個,重複k次,所以,理論上,有可能k次都取到同一個元素。

五、從字串、列表、元組中隨機獲取一個或多個值

sample_list = [i for i in range(1,6)]
print("sample_list: ",sample_list)
print(random.sample(sample_list,1))
sample_tuple = (10,50)
print(random.sample(sample_tuple,2))
sample_str = 'python'
print(random.sample(sample_str,3))

執行結果:

sample_list: [1,5]
[1]
[10,40]
['p','o']

sample(population,k)從可迭代物件中隨機返回k個元素,返回一個列表。

k表示返回元素的個數,這個引數沒有預設值,必須傳值。並且,是一次從可迭代物件中返回k個值,不是分k次,每個元素不會重複被取。此外,k值不可以大於可迭代物件的長度,否則報錯,而上面choices中的k可以無限大,只要需要。使用場景不同,要注意區別。

六、隨機打亂順序

cards = ['%s-%s' % (a,b) for a in ['Spade','Heart','Diamond','Club'] for b in
   ([str(i) for i in range(3,11)] + [j for j in 'JQKA2'])] + ['Black joker','Red joker']
print("Before: ",cards)
random.shuffle(cards)
print("After: ",cards)

執行結果:

Before: ['Spade-3','Spade-4','Spade-5','Spade-6','Spade-7','Spade-8','Spade-9','Spade-10','Spade-J','Spade-Q','Spade-K','Spade-A','Spade-2','Heart-3','Heart-4','Heart-5','Heart-6','Heart-7','Heart-8','Heart-9','Heart-10','Heart-J','Heart-Q','Heart-K','Heart-A','Heart-2','Diamond-3','Diamond-4','Diamond-5','Diamond-6','Diamond-7','Diamond-8','Diamond-9','Diamond-10','Diamond-J','Diamond-Q','Diamond-K','Diamond-A','Diamond-2','Club-3','Club-4','Club-5','Club-6','Club-7','Club-8','Club-9','Club-10','Club-J','Club-Q','Club-K','Club-A','Club-2','Black joker','Red joker']
After: ['Spade-3','Red joker','Diamond-3']

shuffle()將可迭代物件的順序隨機打亂,上面例子中我們模擬了一副撲克牌,然後用shuffle()完成“洗牌”。

注意:shuffle()沒有返回值,是直接對可迭代物件進行修改。

random除了上面的方法外,還有一些按數學分佈隨機生成資料的方法,如正太分佈,指數分佈等,這裡就不繼續舉例了,其實random原始碼也不是很多,裡面的方法數量是人工可數的,需要的話您可以在Pycharm中按住Ctrl點進去看看。

總結

到此這篇關於Python中random模組常用方法的使用教程的文章就介紹到這了,更多相關Python random模組常用方法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!