【Python】randomモジュール解説9選 擬似乱数の基本からシードの使い方まで 具体例を交えて紹介

Pythonのrandomモジュールは、ランダムな数値や要素の選択を行うための標準ライブラリです。

この記事では、randomモジュールの基本的な使い方や、主な関数を紹介します。

randomモジュールとは

randomモジュールは、乱数(ランダムな数値)を生成するために使います。

まず初めにモジュールをインポートします。

コピーしました!

python
import random

基本的な数値の生成

1 random.random()

0以上1未満の浮動小数点数を生成します。次のコードでは、結果が出力されます。

コピーしました!

python
print(random.random())

2 random.randint(a, b)

a以上b以下のランダムな整数を生成します。

コピーしました!

python
print(random.randint(1, 10))

このコードでは、例えば9が出力されます。


3 random.uniform(a, b)

aからbの範囲でランダムな浮動小数点数を生成します。

コピーしました!

python
print(random.uniform(1.5, 3.5))

このコードでは、例えば次のような結果が出力されます。
2.726616432551331


シーケンスから要素を選択する

リストや文字列からランダムに要素を選ぶ関数を紹介します。

4 random.choice(seq)

コピーしました!

python

fruits = ['リンゴ', 'バナナ', 'オレンジ']

print(random.choice(fruits))

例えば、オレンジが選ばれて出力されます。


5 random.choices(seq, k=n)

重複を許可して、シーケンスからk個の要素を選びます。

コピーしました!

python
fruits = ['リンゴ', 'バナナ', 'オレンジ']

print(random.choices(fruits, k=3))

出力結果は、例えば[‘オレンジ’, ‘リンゴ’, ‘オレンジ’]のようになります。


6 random.sample(seq, k=n)

重複なしで、シーケンスからk個の要素を選びます。

コピーしました!

python
fruits = ['リンゴ', 'バナナ', 'オレンジ']

print(random.sample(fruits, k=2))

出力結果は、例えば[‘バナナ’, ‘オレンジ’]のようになります。


7 random.shuffle(seq)

リストの要素をその場でランダムに並べ替えます。

コピーしました!

python
numbers = [1, 2, 3, 4, 5]

random.shuffle(numbers)

print(numbers) 

例えば、[4, 5, 1, 2, 3]のように出力されます。


擬似乱数とシードの設定

擬似乱数とは

擬似乱数は、アルゴリズムによって生成される乱数です。コンピュータ完全なで生成する乱数は、完全なランダムではなく、数学的な計算に基づいて乱数を生成します。そのため、同じ初期値(シード)を設定すると、同じ乱数が生成されます

8 シードの設定

シードを設定すると、同じ乱数を再現できます。

コピーしました!

python
random.seed(42)  # シード値を42に設定

print(random.random())  # 出力は 0.6394267984578837 となります

print(random.randint(1, 10))  # 出力は 1 

同じシードを再設定すれば、同じ乱数列が生成されます。

コピーしました!

python

random.seed(42)

print(random.random())  # 指定したシード値に基づいて、0.6394267984578837 が出力されます

print(random.randint(1, 10))  # 出力は 1

特定の分布に基づく乱数生成

randomモジュールは、さまざまな確率分布に基づく乱数を生成できます。

9 正規分布(ガウス分布)

random.gauss(mu, sigma)は、平均mu、標準偏差sigmaの正規分布に従う乱数を生成します。

例えば、次はmu = 0、sigma = 1 の正規分布に従う乱数を生成します。

コピーしました!

python
print(random.gauss(0, 1)) 

Point:擬似乱数は完全なランダムではない

周期性があり、決定論的に生成されます。

本メディアの記事等の内容には細心の注意を払っておりますが、正確性を保証するものではありません。もし記事内に誤りや不正確な情報がございましたら、こちらのお問い合わせフォームよりご連絡ください。

当メディアは、読者の皆様からのご指摘を大切にし、内容の見直しや修正を行うことで、より有益な記事を提供していく所存です。皆様のご理解とご協力をお願いいたします。