Python で乱数を扱うには、標準ライブラリの random モジュールを使います。数値の乱数生成はもちろん、シーケンス(リストやタプルなど)からランダムに要素を選びたいときにも役立ちます。本記事では、シーケンス内の要素をランダムに選択・抽出・並び替えするための関数を詳しく見ていきましょう。
1. random.choice(seq):ランダムに 1 要素を選ぶ
-
概要
choice()は、与えられたシーケンス(リスト、タプル、文字列など)から、ランダムに 1 つの要素を取得します。実行するたびに異なる要素が返される可能性があるのが特徴です。 -
使用例
import random num_list = [1, 2, 3, 4, 5] random_num = random.choice(num_list) print(random_num) # 実行のたびに1〜5のいずれかが表示される -
ポイント
- 文字列に対しても利用できます:
random.choice("ABCDE")→'A'〜'E'のいずれか 1 文字。 - 単純に「ランダムでひとつだけ選びたい」というシチュエーションで便利です。
- 文字列に対しても利用できます:
2. random.choices(seq, k=n):重複を許して複数要素を選ぶ
-
概要
choices()は、シーケンスから複数の要素を選択しますが、同じ要素を何度も選択する可能性がある「復元抽出」方式です。k引数で取得したい要素の数を指定します。 -
使用例
import random num_list = [1, 2, 3] random_nums = random.choices(num_list, k=6) print(random_nums) # 例: [3, 2, 2, 3, 2, 1] など、要素が重複していてもOK -
ポイント
- 大量のサンプルが必要なときに便利です。例えばガチャの結果を 10 回連続で取得するなど。
- 同じ要素が何度も含まれるかもしれない点に注意が必要です。
3. random.sample(seq, k=n):重複を許さずに複数要素を選ぶ
-
概要
sample()は、シーケンスから複数の要素を重複なく取得する「非復元抽出」を行います。
k引数で取得したい要素の数を指定し、抽出した要素を要素数kのリストで返します。 -
使用例
import random num_list = [1, 2, 3, 4, 5] random_two = random.sample(num_list, 2) print(random_two) # 例: [3, 1] など、実行のたびに結果が変わるが重複はしない -
すべての要素を一度だけランダムに取得したい場合
# シーケンスの長さだけ抽出数を指定する random_all = random.sample(num_list, len(num_list)) print(random_all) # 例: [5, 2, 1, 4, 3] など、順番だけがランダムに変わる -
ポイント
- 同じ要素が 2 度選ばれることはありません。
- ランダムに選んだ要素を漏れなく 1 回だけ使いたいときに便利です。
4. random.shuffle(seq):リストを破壊的にシャッフルする
-
概要
shuffle()はリストの要素をそのまま並べ替え、順序をランダムに変更します。戻り値はNoneなので、リストそのものの並びが変わったと理解しておきましょう。 -
使用例
import random num_list = [1, 2, 3, 4, 5] random.shuffle(num_list) print(num_list) # 例: [3, 1, 4, 5, 2] など、元の並びは失われる -
ポイント
- タプルや文字列など、イミュータブルなシーケンスには使用できません(リストに変換する必要があります)。
- トランプの山札をシャッフルするなど、「もとの順序が直接ランダムに変わる」イメージが必要なときに便利です。
5. 使い分けのポイント
- 1 要素だけランダムに取りたい
→random.choice() - 重複を許しながら複数要素を選びたい
→random.choices(seq, k=n) - 重複を許さずに複数要素を選びたい
→random.sample(seq, k=n) - シーケンスそのものをランダムな順序に並べ替えたい
→random.shuffle()
応用: 「全要素をランダムな順番で取得したい」場合は、random.sample(seq, len(seq)) を使って、シーケンス全体を並べ替えた新しいリストを作成するか、random.shuffle() で元のリスト自体を並べ替える方法があります。
6. シード値による再現性
乱数は実行のたびに変わるため、テストやデバッグでは同じ結果が欲しいときがあります。その場合は random.seed(任意の整数) を使うと、同じ順序の乱数が得られます。
import random
random.seed(123)
print(random.choice([1, 2, 3, 4, 5]))
# 常に同じ結果に固定されるまとめ
choice(),choices(),sample(),shuffle()を使い分けることで、ランダムに要素を取り出すあらゆるニーズに対応できます。- ランダムに要素を抽出するときは、「重複を許すか・許さないか」「もとのリストを変更していいか」などの要件をまずはっきりさせましょう。
- 大量のデータ生成やゲームの山札、実験データのシャッフルなど、多岐にわたる場面で活躍します。
Python でのランダム処理を自在に扱い、柔軟なデータ操作を行いましょう!

