1. 程式人生 > >python-random模組詳解

python-random模組詳解

0.摘要

本文主要介紹random模組的各種方法,並用python3做功能展示。

 

1.random.random()

產生一個位於[0,1)區間的隨機數。

random.random() #產生一個[0,1)的數
10 * random.random() #產生一個[0,10)的數

 

2.random.uniform(a,b)

這個方法的官方解釋很高深,理解不了:

uniform(a, b) method of random.Random instance
    Get a random number in the range [a, b) or [a, b] depending on rounding.

右區間的開閉取決於四捨五入,怎麼個四捨五入呢?找到一個看似正確的解釋,供和我一樣迷惑的讀者參考吧。

https://stackoverflow.com/questions/13213496/what-does-depending-on-rounding-exactly-mean

a = random.uniform(1.23,4.56) #產生一個位於1.23~4.56範圍內的隨機數
b = random.uniform(1.5,-10) #產生一個位於-10~1.5範圍內的隨機數

我自己的直觀理解,就是random.uniform(a,b),得到的是一個位於a,b之間的隨機數(暫且不討論區間開閉問題),

並且,a > b,a =b,a<b都可以。

 

3.random.randint(a,b)

生成一個位於[a,b]的隨機整數。a<=b 。注意,兩邊都是閉區間。

r = random.randint(-100,100) #產生一個位於[-100,100]區間內的整數

 

4.random.randrange(start,stop,step)

生成一個位於[start,stop)的隨機整數,注意,start,stop,step都必須是整數,step為可選引數,預設步長為1。

這個函式主要是為了彌補randint方法的不足,因為randint隨機數生成區間兩邊都是閉區間,這在python中是不友好的。

並且,start 可以小於 stop(步長需要為負數)。

r = random.randrange(1,100) #產生一個在[1,100)之間的整數
r = random.randrange(100,0,-2) #從(0,100]區間中,隨機取一個偶數

 

5.random.sample(population, k)

從population取k個不重複的元素,並存放到列表中,原始資料population保持不變。

population可以是列表、元組、集合。

a = range(100)
b = set(a)
print(random.sample(a,10)) #從列表a中隨機取10個元素
print(random.sample(b,10)) #從集合b中隨機取10個元素

 

6.random.choice(seq)

從非空列表中隨機選取一個元素。

seq可以是列表、元組。

a = range(100)
b = tuple(a)
print(random.choice(a)) # 從列表a中隨機選取一個元素
print(random.choice(b)) # 從元組b中隨機選取一個元素

 

7.random.shuffle(x, random=None)

將x隨機打亂,並替換現有的x。該函式沒有返回值。

這裡說一下random引數:這個引數通常不使用,它要求是一個函式,該函式無引數,能夠返回 [0.0, 1.0)的隨機值。如果random=None,則random=random.random.

a = list(range(10))
print(a)
random.shuffle(a)
print(a)

執行上述程式,我們會發現執行random.shuffle前後的兩個a不同了,後者被隨即打亂。

這裡再舉一個random引數的例子,不再詳細說明:

import random
import numpy as np

a = list(range(10))
random.shuffle(a,np.random.random)
print(a)

 

8.random.seed(x)

random.seed(x)用於設定隨機函式的初始狀態,如果x相同,那麼兩次random操作,得到的結果就是相同的。

x是實數,可以是整數,也可以是浮點數,可以使正數,也可以是負數或0。

import random

a = random.random()
b = random.random()
print(a,b)

random.seed(0)
a = random.random()
random.seed(0)
b = random.random()
print(a,b)

從結果上看,第一次a,b是不同的,第二次的a,b是相同的。

注意:random.seed()作用效果只有一次:

import random

random.seed(1)
for _ in range(10):
    print(random.randint(1,10),end=' ')

print()
print('==================================')

for _ in range(10):
    random.seed(1)
    print(random.randint(1, 10),end=' ')

由於第二次random.seed()寫在了for迴圈中,所以輸出的都是3.