概要
random
モジュールには、疑似乱数を発生させる関数や、コレクションからランダムな要素を選んだり、コレクションをシャッフルしてくれる関数が用意されている。
なお、numpy.randomモジュールにも便利な乱数生成関数が準備されている。
乱数系列/seed()
random.seed()
関数は、引数を指定して乱数系列を固定する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import random random.seed(0) for n in range(5): print(random.random()) # 0.8444218515250481 # 0.7579544029403025 # 0.420571580830845 # 0.25891675029296335 # 0.5112747213686085 # 何度繰り返しても同じ値になる |
疑似乱数/random()
random()
関数は、0≤r<1
の範囲の一様乱数を浮動小数点で返す。
1 2 3 4 5 6 7 8 9 10 |
import random for n in range(0, 5): print(random.random()) # 0.18356662737924279 # 0.2535975770454991 # 0.07112643912586292 # 0.9296944359969844 # 0.16323733244990823 |
一様乱数/uniform()
uniform(a, b)
は、a≤r<b
の範囲の一様乱数を浮動小数点で返す。
1 2 3 4 5 6 7 8 9 10 |
import random for n in range(0, 5): print(random.uniform(1, 5)) # 3.6379958781920916 # 3.380738588720399 # 1.2535708428173264 # 4.802360086175415 # 2.7348909239420416 |
整数乱数/randint(), randrange()
randint(a, b)
はa≤r≤b
の範囲の乱数を整数で返す。第2引数のb
も生成されることに注意。
randrange(start, end, step)
はstart≤r<stop
の範囲でstep
間隔の乱数を整数で返す。第2引数のstop
は生成されないことに注意。step
を省略した場合は1となる。
1 2 3 4 5 6 7 8 9 10 |
import random for n in range(20): print(random.randint(0, 2), end=" ") for n in range(20): print(random.randrange(0, 6, 2), end=" ") # 0 2 2 1 1 2 1 1 1 1 1 2 2 1 0 0 2 1 2 1 # 2 2 4 4 2 0 4 0 2 4 2 2 2 0 4 2 4 4 2 0 |
ランダム選択/choise()
choise(c)
はコレクションcからランダムな要素を一つ選んで返す。
1 2 3 4 5 6 7 8 9 10 11 |
import random cities = ['Yokohama', 'Osaka', 'Nagoya','Sapporo', 'Fukuoka', 'Kobe'] for n in range(0, 5): print(random.choice(cities)) # Kobe # Nagoya # Yokohama # Sapporo # Yokohama |
引数に文字列を指定すると、その中から任意の位置の文字を一つ返す。
1 2 3 4 5 6 7 8 9 10 11 |
import random a_string = 'ABCDEFG' for n in range(0, 5): print(random.choice(a_string)) # D # C # E # D # B |
シャッフル/shuffle()
shuffle(c)
はコレクションの内容をシャッフルする。イミュータブルな文字列を指定するとTypeError
になる。
1 2 3 4 5 6 7 |
import random cities = ['Yokohama', 'Osaka', 'Nagoya','Sapporo', 'Fukuoka', 'Kobe'] random.shuffle(cities) print(cities) # ['Nagoya', 'Kobe', 'Fukuoka', 'Osaka', 'Yokohama', 'Sapporo'] |