環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonで整数と小数の乱数(とそのリスト)をつくる:random・uniform・randint・randrange・sample・choicesの使い方

最終更新日 2023.02.18

乱数とはランダムな数のことです。Python で乱数を作るためには、random というライブラリ(モジュール)をインポートします。

random

random の random 関数を使うと、0 から 1 までの乱数を作ることができます。この乱数は float 型の小数になります。

import random

a = random.random()
print(a)  # 0.3863291060324503

シードを作って、いつも同じ乱数にすることもできます。

import random

random.seed(3)

a = random.random()
print(a)  # 0.23796462709189137

uniform

random 関数の範囲は 0〜 1ですが、上限と下限を任意に設定するには random ではなく uniform を使います。

import random

a = random.uniform(3.14, 6.5)
print(a)  # 4.5752165690001725

uniform は float 型を返します。上限と下限が等しいときは、その値しか返りません。

import random

a = random.uniform(4, 4)
print(a)  # 4.0

randint

randint は上限と下限を指定して、その範囲内で整数を出力する関数です。randint(a, b) は a 以上 b 以下の整数をランダムで返します。

import random

a = random.randint(5, 12)
print(a)  # 11

randint のバラつき具合を確かめてみましょう。

import random

for n in range(30):
    print(random.randint(5, 12))

結果はこうなります。

7
8
11
8
10
11
8
10
10
9
5
5
10
11
6
12
11
7
6
12
10
9
10
12
6
5
9
6
5
5

randrange

randrange は指定された範囲からランダムに整数を返します。

import random

for i in range(8):
    a = random.randrange(10, 20, 2)
    print(a)

結果:

16
14
18
10
16
10
18
18

randrange(10, 20, 2) は range(10, 20, 2) からランダムに整数を返します。

x = range(10, 20, 2)
for i in x:
    print(i)

出力:

10
12
14
16
18

sample

sample は乱数のリストを返す関数です。sample は randrange と同じように、range に相当する範囲からいくつかの要素を取り出します。

import random

a = random.sample(range(10, 40, 2), k=4)

print(a)
# [30, 14, 32, 26]

第二引数の k は抽出する要素の個数です。上のコードは 4 つの要素を抽出しています。この数は、もとの range にある要素数を超えてはいけません。

import random

a = random.sample(range(1, 10, 2), k=100)

print(a)
# ValueError: Sample larger than population or is negative

sample は重複がありません。重複を許さないため、抽出する要素数はもとの要素数を超えてはいけないわけです。

choices

choices は sample とほぼ同じですが、重複を許します。

import random

a = random.choices(range(10, 40, 2), k=5)

print(a)
# [32, 18, 10, 24, 26]

重複が出る例:

import random

a = random.choices(range(10, 20, 2), k=8)

print(a)
# [10, 18, 12, 16, 12, 12, 18, 18]

k の値が大きくなっても、重複を許すのでエラーが起きません。ちなみに choices と choice は別の関数です。ここでは choices を使っていることに注意しましょう。