可以使用 Python 標準庫的 random 模塊中的 random()、uniform()、randange() 和 randint() 函數生成隨機數。
random 模塊包含在標準庫中,因此無需額外安裝。當然,您需要導入它。
此處提供了以下信息。
random.random()
(0.0 到 1.0 之間的浮點數)random.uniform()
(任意範圍的浮點數)- 生成服從正態分佈、高斯分佈等的隨機數。
random.randrange()
(任意範圍和步長的整數)random.randint()
(任意範圍內的整數)- 生成以隨機數為元素的列表
- 隨機浮點數列表
- 整數隨機數列表
- 初始化隨機數生成器(固定隨機數種子)
請參閱以下文章,了解如何隨機提取或排序列表的元素。
random.random()(0.0 到 1.0 之間的浮點數)
random 模塊的函數 random() 生成一個介於 0.0 和 1.0 之間的 float 類型的隨機浮點數。
import random
print(random.random())
# 0.4496839011176701
random.uniform()(任意範圍的浮點數)
uniform(a, b)
該 random 模塊的函數生成以下任意範圍內的浮點數 float 類型的隨機數
a <= n <= b
b <= n <= a
import random
print(random.uniform(100, 200))
# 175.26585048238275
這兩個參數可以更大或更小;如果它們相等,它們自然只會返回那個值。返回值始終是浮點數。
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
該參數也可以指定為浮點數。
print(random.uniform(1.234, 5.637))
# 2.606743596829249
b 的值是否包含在範圍內取決於以下舍入,如文檔所述。a + (b-a) * random.random()
端點值 b 是否在範圍內取決於下式中的浮點舍入
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation
生成服從正態分佈、高斯分佈等的隨機數。
上面的 random() 和 uniform() 函數生成均勻分佈的隨機數,但也有一些函數可以生成遵循以下分佈的浮點數。
- 貝塔分佈:
random.betavariate()
- 指數分佈:
random.expovariate()
- 伽馬分佈:
random.gammavariate()
- 高斯分佈:
random.gauss()
- 對數正態分佈:
random.lognormvariate()
- 正態分佈:
random.normalvariate()
- 馮米塞斯分佈:
random.vonmisesvariate()
- 帕累托分佈:
random.paretovariate()
- 威布爾分佈:
random.weibullvariate()
每個分佈的參數由參數指定。詳見官方文檔。
random.randrange()(任意範圍和步長的整數)
randrange(start, stop, step)
這個 random 模塊的函數從以下元素中返回一個隨機選擇的元素。range(start, stop, step)
與 range() 一樣,參數 start 和 step 可以省略。如果省略,則 start=0 且 step=1。
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
參數 step 可以設置為生成偶數或奇數隨機整數,或三的倍數的隨機整數。
例如,如果 start 為偶數且 step=2,則只能隨機獲取範圍內的偶數整數。
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint()(任意範圍內的整數)
randint(a, b)
這個 random 模塊的函數返回以下隨機整數 int。a <= n <= b
randrange(a, b + 1)
相當於這個;請注意,b 的值也包含在範圍內。
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
生成以隨機數為元素的列表
在本節中,我們將解釋如何使用標準庫的 random 模塊生成以隨機數為元素的列表。
帶有浮點數的隨機數列表
要生成元素為浮點隨機數的列表,請將 random() 和 uniform() 函數與列表理解表示法相結合。
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
在上面的示例中,使用了 range(),但列表和元組也可以用於所需數量的元素。有關列表推導的更多詳細信息,請參閱以下文章。
- 相關文章:使用 Python 列表推導符號
整數 int 隨機數列表
在生成元素為整數隨機數的列表時,將上述 randange() 和 randint() 與列表理解表示法結合可能會導致重複值。
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
如果要生成不重複的隨機整數序列,請使用 random.sample() 提取具有任意範圍的 range() 元素。
print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]
print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]
有關 random.sample() 的更多信息,請參閱以下文章。
初始化隨機數生成器(固定隨機數種子)
通過給隨機模塊的函數seed()一個任意整數,可以固定隨機數種子並且可以初始化隨機數生成器。
使用相同的種子初始化後,隨機值總是以相同的方式生成。
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025