Pythonの固定サンプルとrandomサンプルSeedを使用したshuffle

Pythonのrandomモジュールは、擬似乱数を生成するためのモジュールです。このモジュールを使用することで、ランダムな数値、文字列、リストなどを生成することができます。

random.shuffleとrandom.sampleの違い

randomモジュールには、ランダムにリストをシャッフルするrandom.shuffle()と、指定したサイズのランダムなサブセットを選択するrandom.sample()という2つの関数があります。

random.shuffle()は、リストをランダムに並び替えます。一方、random.sample()は、リストの中から指定したサイズのランダムなサブセットを選択し、そのリストを返します。

random.shuffleを使用したリストのシャッフル方法

random.shuffle()を使用することで、リストをランダムにシャッフルすることができます。以下は、random.shuffle()を使用したリストのシャッフル方法です。

import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)

このコードを実行すると、my_listの要素がランダムに並び替えられます。

固定シードを使用したrandom.shuffleの挙動

random.shuffle()は、デフォルトではランダムなシード値を使用してリストをシャッフルします。しかし、同じシード値を使用することで、同じ結果を得ることができます。

以下は、固定シードを使用したrandom.shuffle()のコード例です。

import random
my_list = [1, 2, 3, 4, 5]
random.seed(0) # 固定シードを使用
random.shuffle(my_list)
print(my_list)

このコードを実行すると、my_listの要素が固定されたランダムな順序で並び替えられます。

random.shuffleのインプレースな操作とその利点

random.shuffle()は、リストをインプレースでシャッフルするため、新しいリストを作成する必要がありません。これにより、メモリ使用量が削減されます。

以下は、random.shuffle()をインプレースで使用した例です。

import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)

このコードを実行すると、my_listの要素がランダムに並び替えられます。

random.shuffleを非インプレースに使う方法

random.shuffle()をインプレースでなく使用する場合は、copy()関数を使用してリストをコピーし、コピーしたリストをシャッフルします。

以下は、random.shuffle()を非インプレースで使用した例です。

import random
my_list = [1, 2, 3, 4, 5]
new_list = my_list.copy()
random.shuffle(new_list)
print(new_list)

このコードを実行すると、new_listの要素がランダムに並び替えられます。

まとめ

Pythonのrandomモジュールには、ランダムなリストをシャッフルするrandom.shuffle()と、指定したサイズのランダムなサブセットを選択するrandom.sample()という2つの関数があります。random.shuffle()は、リストをランダムにシャッフルすることができ、固定シードを使用することで同じ結果を得ることもできます。random.shuffle()は、インプレースでリストをシャッフルするため、メモリ使用量を削減することができます。