Pythonで整数と小数の乱数(とそのリスト)をつくる:random・uniform・randint・randrange・sample・choicesの使い方
乱数とはランダムな数のことです。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 を使っていることに注意しましょう。