前言
Python 的random模塊包含許多隨機數生成器。
random是Python標準庫之一,直接導入即可使用。本文介紹random中常用方法的用法。
一、生成隨機的整數
1
2
3
4
5
6
|
# 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, end, step)生成的列表中的隨機一個值。這里是左閉右開區間,如果上面代碼的51如果換成50,則不可能返回50。
每次運行的結果是不同的,因為是隨機返回其中一個。
二、生成隨機的小數
1
2
|
print (random.random()) print (random.uniform( 2 , 5 )) |
運行結果:
0.49541524802465897
2.948656863619216
random()返回0到1之間的任意一個浮點數。
uniform(start, end)返回start到end之間的任意一個浮點數,其實就是將random()的結果乘(end-start),代碼就是這么實現的。
三、從字符串、列表、元組中隨機返回一個值
1
2
3
4
5
6
7
|
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()返回可迭代對象中的一個值。可以是列表、元組、字符串,不能是字典和集合。
四、從字符串、列表、元組中隨機返回一次或多次,且設置權重
1
2
3
4
5
6
7
8
|
choice_list = [i for i in range ( 1 , 6 )] print ( "choice_list: " , choice_list) print (random.choices(choice_list)) choice_tuple = ( 10 , 20 , 30 , 40 , 50 ) print (random.choices(choice_tuple, k = 2 )) choice_str = 'python' print (random.choices(choice_str, weights = [ 0.5 , 0 , 0.5 , 0 , 0 , 0 ], k = 7 )) print (random.choices(choice_str, cum_weights = [ 0 , 0.5 , 0.5 , 1 , 1 , 1 ], k = 7 )) |
運行結果:
choice_list: [1, 2, 3, 4, 5]
[4]
[20, 50]
['t', 'p', 't', 'p', 'p', 't', 't']
['h', 'y', 'h', 'h', 'h', '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次都取到同一個元素。
五、從字符串、列表、元組中隨機獲取一個或多個值
1
2
3
4
5
6
7
|
sample_list = [i for i in range ( 1 , 6 )] print ( "sample_list: " , sample_list) print (random.sample(sample_list, 1 )) sample_tuple = ( 10 , 20 , 30 , 40 , 50 ) print (random.sample(sample_tuple, 2 )) sample_str = 'python' print (random.sample(sample_str, 3 )) |
運行結果:
sample_list: [1, 2, 3, 4, 5]
[1]
[10, 40]
['p', 'h', 'o']
sample(population, k)從可迭代對象中隨機返回k個元素,返回一個列表。
k表示返回元素的個數,這個參數沒有默認值,必須傳值。并且,是一次從可迭代對象中返回k個值,不是分k次,每個元素不會重復被取。此外,k值不可以大于可迭代對象的長度,否則報錯,而上面choices中的k可以無限大,只要需要。使用場景不同,要注意區別。
六、隨機打亂順序
1
2
3
4
5
|
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', 'Diamond-J', 'Club-8', 'Club-7', 'Diamond-10', 'Spade-J', 'Heart-J', 'Diamond-A', 'Spade-K', 'Spade-10', 'Spade-8', 'Club-10', 'Club-J', 'Heart-9', 'Diamond-4', 'Diamond-5', 'Red joker', 'Spade-5', 'Club-4', 'Club-Q', 'Heart-7', 'Spade-Q', 'Club-A', 'Spade-6', 'Diamond-6', 'Black joker', 'Spade-7', 'Heart-Q', 'Club-9', 'Club-3', 'Heart-K', 'Diamond-Q', 'Diamond-K', 'Spade-2', 'Heart-5', 'Heart-A', 'Heart-4', 'Heart-3', 'Diamond-7', 'Club-K', 'Diamond-9', 'Spade-4', 'Heart-2', 'Spade-A', 'Club-6', 'Club-2', 'Heart-8', 'Diamond-2', 'Heart-10', 'Heart-6', 'Club-5', 'Spade-9', 'Diamond-8', 'Diamond-3']
shuffle()將可迭代對象的順序隨機打亂,上面例子中我們模擬了一副撲克牌,然后用shuffle()完成“洗牌”。
注意:shuffle()沒有返回值,是直接對可迭代對象進行修改。
random除了上面的方法外,還有一些按數學分布隨機生成數據的方法,如正太分布,指數分布等,這里就不繼續舉例了,其實random源碼也不是很多,里面的方法數量是人工可數的,需要的話您可以在Pycharm中按住Ctrl點進去看看。
總結
到此這篇關于Python中random模塊常用方法的使用教程的文章就介紹到這了,更多相關Python random模塊常用方法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_43790276/article/details/96768637