標準ライブラリrandomのchoice、choices、sampleを用いるとリスト等から要素をランダムに抽出できる。また、shuffleにより要素をシャッフルできる。
ライブラリrandomを使う際にはimportが必要。
import random
1. ランダムに要素を抽出するchoice
2. 複数の要素を重複ありで抽出するchoices
3. 複数の要素を重複なしで抽出するsample
4. 要素をランダムに並べ替えるshuffle
5. リファレンス
1. ランダムに要素を抽出するchoice
choiceはリストやタプルなどから要素を1つランダムに抽出する。
import random x = [2, 5, 8, 9] random.choice(x)
実行結果
8
リストやタプルが空の場合はIndexErrorとなる。
import random x = [] random.choice(x)
実行結果
IndexError: Cannot choose from an empty sequence
2. 複数の要素を重複ありで抽出するchoices
choicesは母集団populationから重複ありで選んだ要素からなる大きさkのリストを返す。
random.choices(population, weights=None, *, cum_weights=None, k=1)
要素7つのタプルから重複ありで要素4のリストを作る場合。
import random x = (2, 5, 8, 9, 11, 15, 17) random.choices(x, k=4)
実行結果
[8, 11, 8, 17]
weightを指定すると要素ごとに選択する確率に重みを付けられる。weightはリストで指定してその要素数はpopulationの要素数と同じにする。
'A', 'B', 'C', 'D'を1倍、'E', 'F'を2倍、'G'を4倍の重みづけにした場合。確率の高い'G'が多く選ばれる。
import random x = ('A', 'B', 'C', 'D', 'E', 'F', 'G') random.choices(x, weights=[1,1,1,1,2,2,8], k=4)
実行結果
['G', 'G', 'G', 'D']
cum_weightも同様に確率に重みを付けられる。リストの値は各要素の重みづけの累積値となる。
上の例と同じ、'A', 'B', 'C', 'D'を1倍、'E', 'F'を2倍、'G'を4倍の重みづけにする場合。
import random x = ('A', 'B', 'C', 'D', 'E', 'F', 'G') random.choices(x, cum_weights=[1,2,3,4,6,8,16], k=4)
実行結果
['E', 'F', 'G', 'G']
3. 複数の要素を重複なしで抽出するsample
sampleは母集団populationから重複なしで選んだ要素からなる大きさkのリストを返す。
kの値はpopulationの要素数以下でないといけない。
random.sample(population, k, *)
要素7つのタプルから重複なしで要素4のリストを作る場合。
import random x = (2, 5, 8, 9, 11, 15, 17) random.sample(x, k=4)
実行結果
[2, 9, 17, 8]
sampleをrangeと組み合わせることで、連続する数の集合からランダムなサンプリングができる。
0~99の数字から10要素を重複なく選択する場合。
import random random.sample(range(100), k=10)
実行結果
[3, 85, 90, 1, 4, 78, 21, 28, 51, 37]
4. 要素をランダムに並べ替えるshuffle
shuffleは要素の順番をランダムに入れ替える。
random.shuffle(x[, random])
リストを並べ替える場合。
import random x = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] random.shuffle(x) x
実行結果
['C', 'A', 'F', 'D', 'E', 'G', 'B']
タプルはイミュータブル(変更できない)のでshuffleするとエラーとなる。
import random x = ('A', 'B', 'C', 'D', 'E', 'F', 'G') random.shuffle(x) x
実行結果
TypeError: 'tuple' object does not support item assignment
タプルを並べ替える場合はsample(x, k=len(x))とする。
import random x = ('A', 'B', 'C', 'D', 'E', 'F', 'G') random.sample(x, k=len(x))
実行結果
['F', 'G', 'C', 'D', 'B', 'A', 'E']
5. リファレンス
Python 標準ライブラリ > random --- 擬似乱数を生成する > シーケンス用の関数
0 件のコメント:
コメントを投稿