擬似ランダム用語では、そのキーがシードと呼ばれ、あなたが新しいrandom.Random()
インスタンス上でランダムシードを設定することができます。
def keyed_shuffle(x, seed=None):
random_obj = random.Random(seed)
random_obj.shuffle(x)
あなたも直接random.seed()
とrandom.shuffle()
を使用していますが、使用した可能性があり独自のrandom.Random()
インスタンスは、random
モジュールが使用するシングルトンrandom.Random()
インスタンスでシードを設定することを回避し、そのモジュールの他の用途には影響しません。
シードは、整数(直接使用される)でも、ハッシュ可能なオブジェクトでもかまいません。
デモ:
>>> a = [10, 50, 42, 193, 21, 88]
>>> keyed_shuffle(a) # no seed
>>> a
[42, 10, 88, 21, 50, 193]
>>> a = [10, 50, 42, 193, 21, 88]
>>> keyed_shuffle(a) # again no seed, different random result
>>> a
[88, 50, 193, 10, 42, 21]
>>> b = [10, 50, 42, 193, 21, 88]
>>> keyed_shuffle(b, 42) # specific seed
>>> b
[193, 50, 42, 21, 10, 88]
>>> b = [10, 50, 42, 193, 21, 88]
>>> keyed_shuffle(b, 42) # same seed used, same output
>>> b
[193, 50, 42, 21, 10, 88]
>>> c = [10, 50, 42, 193, 21, 88]
>>> keyed_shuffle(b, 81) # different seed, different random order
>>> c
[10, 50, 88, 42, 193, 21]
'キーの所有者とは何ですか? 「決定論的に同じシャッフルを生み出す」とはどういう意味ですか? –
ランダムではない乱数が必要ですか?それはあなたが求めていることですか? –
@ 2ビットアルケミスト私は、入力されたキー、シャッフルされる要素のシーケンス、およびキーに応じてランダムな並べ替えを出力するアルゴリズムが必要です。シャッフルを同じ入力シーケンスで同じキーを入力して再度適用すると、同じ結果が得られます。そうでなければランダムシャッフル。同じデータの同じキーで「シャッフル解除」することができます – curious