隨機數 random
Python 的標準函式「random」提供了產生隨機數的方法,不論是隨機整數、隨機浮點數,或要從串列中隨機取值,都能透過 random 標準函式來實現。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
random 常用方法
下方列出幾種 random 模組常用的方法 ( 參考 Python 官方文件:random ):
方法 | 參數 | 說明 |
---|---|---|
seed() | x | 設定隨機數的種子 |
random() | 產生一個 0.0~1.0 之間的隨機浮點數 | |
uniform() | x, y | 產生一個 x~y 之間的隨機浮點數 |
randint() | x, y | 產生一個 x~y 之間的隨機整數 |
randrange() | x, y, step | 產生一個間隔為 step,x~y 之間的隨機整數 |
choice() | seq | 從字串、串列或 tuple 中,隨機取出一個項目 |
choices() | seq, k | 從字串、串列或 tuple 中,隨機取出 k 個項目 ( 可能重複 ) |
sample() | seq, k | 從字串、串列或 tuple 中,隨機取出 k 個項目 ( 不會重複 ) |
shuffle() | seq | 將原本的串列順序打亂 |
import random
要使用 random 必須先 import random 模組,或使用 from 的方式,單獨 import 特定的類型。
import random
from random import sample
seed(x)
Python random 模組所產生的隨機數並不是真正的「隨機」,而是演算法根據「種子 seed」產生的一組數字,預設這個 seed 以電腦系統的時間為主,因此如果種子相同,就會產生相同的隨機數,以下方的程式為例,種子如果都是 1,產生的隨機數就一模一樣。
import random
random.seed(1)
print(random.random()) # 0.13436424411240122
random.seed(1)
print(random.random()) # 0.13436424411240122
random.seed(1)
print(random.random()) # 0.13436424411240122
random()
random.random() 使用後會產生一個 0.0~1.0 之間的隨機浮點數。
import random
print(random.random()) # 0.6958328667684435
uniform(x, y)
random.uniform(x, y) 使用後會產生一個 x~y 之間的隨機浮點數。
import random
print(random.uniform(3,5)) # 3.691400829417505
randint(x, y)
random.randint(x, y) 使用後會產生一個 x~y 之間的隨機整數。
import random
print(random.randint(2,10)) # 7
randrange(x, y, step)
random.randrange(x, y, step) 使用後會產生一個 x~y 之間的隨機整數,step 預設為 1,表示要間隔多少數字,例如下方的程式將 step 設定為 2,取出的隨機數就都會是偶數。
import random
print(random.randrange(2,10,2)) # 6
random.randrange 也可以只設定一個數字,表示 0~這個數字之間的隨機整數。
import random
print(random.randrange(10)) # 9
choice(seq)
random.choice(seq) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出一個項目。
import random
print(random.choice([1,2,3,4,5])) # 2 串列
print(random.choice((1,2,3,4,5))) # 5 tuple
print(random.choice('12345')) # 1 字串
choices(seq, k)
random.choices(seq, k) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出 k 個項目,取出的項目可能會重複,並將這 k 個項目組成一個新的串列。
import random
print(random.choices([1,2,3,4,5],k=2)) # [2, 1]
print(random.choices((1,2,3,4,5),k=3)) # [3, 1, 1]
print(random.choices('12345',k=4)) # ['2', '5', '4', '4']
sample(seq, k)
random.sample(seq, k) 可以從一個字串、串列或 tuple 中 ( 有順序的物件 ),隨機取出 k 個項目,每個項目不會重複,並將這 k 個項目組成一個新的串列,k 一定要填入數字,且不能大於物件的長度 ( 例如串列的長度是 4,k 就不能大於 4 )。
import random
print(random.sample([1,2,3,4,5], k=4)) # [2, 5, 3, 4]
print(random.sample((1,2,3,4,5), k=4)) # [2, 1, 5, 4]
print(random.sample('12345', k=4)) # ['2', '5', '3', '1']
shuffle(list)
random.shuffle(seq) 使用後,會將原本的「串列」順序打亂 ( 不支援 tuple,因為 tuple 不能被修改 )。
a = [1,2,3,4,5]
print(a) # [1,2,3,4,5]
random.shuffle(a)
print(a) # [3, 2, 5, 4, 1]
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~