Python - 乱数を生成する

乱数を生成する: random.random() 関数

random モジュールの random() 関数は 0.0 以上 1.0 未満の浮動小数点数 float 型の乱数を生成します。

import random

print(random.random())
# 0.934274368388453
乱数を生成する: random.random() 関数

乱数を生成する: random.uniform() 関数

random モジュールの random.uniform(a, b) 関数は任意の範囲 a <= n <= b または b <= n <= a の浮動小数点数 float 型の乱数を生成します。

import random

print(random.uniform(10, 20))
# 17.433885512957488

print(random.uniform(10, -10))
# -1.0148614577724437
乱数を生成する: random.uniform() 関数

b の値が範囲に含まれるかどうかは a + (b-a) * random() における浮動小数点の丸めに依存します。

乱数を生成する: 実数分布

Python では、以下の分布に従う浮動小数点を生成する関数も用意されています。

ベータ分布
random.betavariate()
指数分布
random.expovariate()
ガンマ分布
random.gammavariate()
ガウス分布
random.gauss()
対数正規分布
random.lognormvariate()
正規分布
random.normalvariate()
フォン・ミーゼス分布
random.vonmisesvariate()
パレート分布
random.paretovariate()
ワイブル分布
random.weibullvariate()

乱数を生成する: random.randrange()

random モジュールの randrange(start, stop, step) 関数は、range(start, stop, step) の要素からランダムに選ばれた要素(整数 int型)を返します。引数の 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))
# 8
乱数を生成する: random.randrange() 関数

引数の step を設定すると、偶数や奇数のランダム整数を生成することができます。例えば、start が偶数で step=2 を指定すると、範囲内の偶数がランダムに取得できます。

import random

print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]

print(random.randrange(10, 20, 2))
# 18
乱数を生成する: random.randrange() 関数

乱数を生成する: random.randint()

random モジュールの randint(a, b) 関数は a <= n <= b のランダムな整数 intを返します。randrange(a, b + 1)と等価であるため b の値も範囲に含まれます。

import random

print(random.randint(50, 100))
# 61
乱数を生成する: random.randint() 関数

乱数を生成する: 浮動小数点 float の乱数リストの生成

浮動小数点数の乱数を要素とするリストを生成するには、random()関数 や uniform() 関数とリスト内包表記を組み合わせて生成します。

import random

print([random.random() for i in range(5)])
# [0.3810356026878696, 0.5307217654038043, 0.5430503549852508, 0.923025001894804, 0.8995990884759819]
乱数を生成する: 浮動小数点 float の乱数リストの生成

乱数を生成する: 整数 int の乱数リストの生成

整数の乱数を要素とするリストを生成する場合、randrange()randint() をリスト内包表記と組み合わせて生成します。ただし、この方法では値が重複する可能性があります。

import random

print([random.randint(0, 10) for i in range(5)])
# [7, 0, 8, 2, 4]
乱数を生成する: 整数 int の乱数リストの生成

値が重複しない乱数のリストを生成するには、任意の範囲を指定した range() 関数の要素を random.sample() 関数で抽出します。

import random

print(random.sample(range(10), k=5))
# [8, 0, 9, 3, 7]
乱数を生成する: 整数 int の乱数リストの生成

乱数を生成する: 乱数シードを固定

random モジュールの seed() 関数に任意の整数を与えることで、乱数シードを固定することができます。乱数シードを固定した場合、常に同じ要素が返ります。

import random

random.seed(0)
print(random.random())
# 0.8444218515250481
乱数を生成する: 乱数シードを固定

関連記事