在 Python 中生成隨機小數和整數,包括 random()、randrange() 和 randint()

商業

可以使用 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(),但列表和元組也可以用於所需數量的元素。有關列表推導的更多詳細信息,請參閱以下文章。

整數 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