randomモジュールのsampleメソッド
randomモジュールのsampleメソッドは、
シーケンスからランダムに要素を抽出します。
メソッドの第一引数にはシーケンスを、
第二引数にはランダムに選択したい要素の数を指定します。
第三のオプションのキーワード引数kで、
繰り返しのための要素のリストを設定できます。
これにより、指定した要素が選ばれる確率を高めることができます。
この第三引数はPythonのバージョン3.9以降でのみ追加されたことに注意してください。
構文
import random
random.sample(シーケンス, 要素数, [k=繰り返し])
例
リストからランダムに3つの要素を取得してみましょう:
lst = [1, 2, 3, 4, 5]
print(random.sample(lst, 3))
コードの実行結果:
[2, 1, 5]
例
タプルからもランダム要素のサンプリングを試してみましょう:
tpl = (1, 2, 3, 4, 5)
print(random.sample(tpl, 2))
コードの実行結果:
[3, 2]
例
range関数が生成するシーケンスからも要素を選択できます:
print(random.sample(range(0, 10), 3))
コードの実行結果:
[0, 8, 9]
例
次に、リストを用意し、countsパラメータを使って
リスト内の各要素の繰り返し回数を指定してみましょう。
この場合、最初の要素を2回、2番目の要素を3回、
3番目の要素を4回繰り返すことにします。
また、抽出する要素数を指定するためにkパラメータ名を明示する必要があります:
lst = [1, 2, 3]
print(random.sample(lst, counts=[2, 3, 4], k=3))
このコードは以下と等価です:
lst = [1, 1, 2, 2, 2, 3, 3, 3, 3] # 事実上このようなリスト
print(random.sample(lst, 3))
例
今度は集合から要素を取得してみましょう:
st = {1, 2, 3, 4, 5}
print(random.sample(st, 2))
以下のような警告が返されます:
[5, 2]
DeprecationWarning: Sampling from a set deprecated
since Python 3.9 and will be removed in a subsequent version.
print(random.sample(st, 2))
これは、Pythonバージョン3.9以降では、
集合からのサンプリングが想定されていないためです。