Pythonのリストをシャッフルする方法を解説!初心者向けにrandom.shuffleの使い方をやさしく説明
生徒
「Pythonで、リストの中身をランダムな順番にしたいときってどうすればいいんですか?」
先生
「そのときはrandom.shuffleという関数を使います。これはリストの中の要素をシャッフル、つまり順番をバラバラにしてくれる便利な機能なんですよ。」
生徒
「じゃんけんの順番や、カードをまぜるようなときにも使えそうですね!」
先生
「その通りです!実際にどう使うか、一緒に見ていきましょう。」
1. Pythonのリストをシャッフルするには?
Pythonでは、randomモジュールのshuffle関数を使うことで、リストの中のデータをランダムに並び替えることができます。
たとえば、数字のリストをシャッフルする場合は以下のように書きます。
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
実行するたびに、リストの順番が変わります。
[3, 1, 5, 2, 4]
このように、random.shuffleはリストをその場で直接書き換える関数です。
2. random.shuffleを使うときの注意点
random.shuffleを使うには、あらかじめrandomモジュールをimportしておく必要があります。
Pythonの「モジュール」とは、便利な機能がまとまっている箱のようなもので、importという命令を使うことでその中の機能を使えるようになります。
また、shuffle関数は元のリストを直接変更します。新しいリストを返してくるわけではありません。
そのため、元の順番を残しておきたい場合は、あらかじめコピーを取っておく必要があります。
import random
original = [1, 2, 3, 4, 5]
copy_list = original.copy()
random.shuffle(copy_list)
print("元のリスト:", original)
print("シャッフル後:", copy_list)
元のリスト: [1, 2, 3, 4, 5]
シャッフル後: [3, 1, 5, 2, 4]
3. 文字列のリストをシャッフルしてみよう
数字だけでなく、文字列のリストもシャッフルできます。たとえば、名前のリストを使ってランダムな順番を作ることができます。
import random
names = ["田中", "佐藤", "鈴木", "高橋"]
random.shuffle(names)
print(names)
['鈴木', '高橋', '田中', '佐藤']
このように、shuffleはデータの種類に関係なく、リストであれば何でもランダムに並び替えることが可能です。
4. シャッフルを使った実用的な例
random.shuffleは、ゲームや抽選、クイズなどさまざまな場面で役立ちます。
たとえば、ランダムに質問を出したいときや、プレイヤーの順番を決めたいときなど。
次の例では、4人の名前からランダムな順番で「じゃんけんの順番」を決めています。
import random
players = ["ゆうき", "あい", "たかし", "さくら"]
random.shuffle(players)
for i, name in enumerate(players, 1):
print(f"{i}番目: {name}")
1番目: あい
2番目: たかし
3番目: ゆうき
4番目: さくら
5. シャッフルではなく、新しい順番を作りたいときは?
元のリストを変更せずに、新しいランダムな順番を作りたいときは、random.sampleを使う方法もあります。
sampleは、「元のリストを残しながら、ランダムな並びのコピー」を作ってくれる関数です。
import random
cards = ["A", "B", "C", "D"]
shuffled = random.sample(cards, len(cards))
print("元のカード:", cards)
print("シャッフル結果:", shuffled)
元のカード: ['A', 'B', 'C', 'D']
シャッフル結果: ['C', 'A', 'D', 'B']
random.shuffleは元のデータを壊す、random.sampleは元のデータを壊さない、という違いを覚えておきましょう。
6. random.shuffleと一緒によく使う関数
シャッフルした後に、先頭の1人だけを選ぶというような処理をしたいときもあります。
次の例では、シャッフルしたあと最初の1人を「今日の当番」にしています。
import random
students = ["山田", "中村", "鈴木", "井上"]
random.shuffle(students)
print("今日の当番は:", students[0])
今日の当番は: 鈴木
このように、shuffleのあとにインデックス(位置)で取り出せば、ランダムな1人を選ぶことができます。