カテゴリ: Python 更新日: 2026/03/05

Pythonのリストをシャッフルする方法を解説!初心者向けにrandom.shuffleの使い方をやさしく説明

Pythonのリストをシャッフルする方法(random.shuffleの活用)
Pythonのリストをシャッフルする方法(random.shuffleの活用)

先生と生徒の会話形式で理解しよう

生徒

「Pythonで、リストの中身をランダムな順番にしたいときってどうすればいいんですか?」

先生

「そのときはrandom.shuffleという関数を使います。これはリストの中の要素をシャッフル、つまり順番をバラバラにしてくれる便利な機能なんですよ。」

生徒

「じゃんけんの順番や、カードをまぜるようなときにも使えそうですね!」

先生

「その通りです!実際にどう使うか、一緒に見ていきましょう。」

1. Pythonのリストをシャッフルする方法(random.shuffle)

1. Pythonのリストをシャッフルする方法(random.shuffle)
1. Pythonのリストをシャッフルする方法(random.shuffle)

Pythonでリストの要素をバラバラの順序に並び替えたいときは、標準ライブラリのrandomモジュールに含まれるshuffle(シャッフル)という関数を使うのが最も一般的で簡単です。

トランプのカードを混ぜるように、既存のリストの中身をランダムに入れ替えることができます。プログラミング未経験の方でも、以下の短いコードを書くだけで実行可能です。


import random

# シャッフルしたいデータのリストを作成
numbers = [1, 2, 3, 4, 5]

# random.shuffleを使ってリストの中身を混ぜる
random.shuffle(numbers)

# 結果を表示
print(numbers)

このプログラムを実行するたびに、結果は以下のように変わります。


[4, 2, 5, 1, 3]

ここで初心者が覚えておきたい重要なポイントは、random.shuffle(numbers)を実行した瞬間に、変数「numbers」の中身そのものが直接書き換わるという点です。これをプログラミング用語で「破壊的な処理(インプレース操作)」と呼びます。

わざわざ「新しい変数 = random.shuffle(リスト)」のように書く必要はなく、1行実行するだけで元のリストがランダムな状態にアップデートされます。非常に直感的で使いやすい関数ですね。

2. random.shuffleを使うときの注意点と事前準備

2. random.shuffleを使うときの注意点と事前準備
2. random.shuffleを使うときの注意点と事前準備

Pythonでリストの要素をバラバラに並べ替えるrandom.shuffleは非常に便利ですが、初心者がつまずきやすい「2つの重要なポイント」があります。これを知っておかないと、プログラムが動かなかったり、大切なデータを消してしまったりする原因になります。

① 使う前に「randomモジュール」を読み込む

まず、random.shuffleを使うには、あらかじめrandomモジュールを「import(インポート)」しておく必要があります。

Pythonの「モジュール」とは、特定の便利な機能がぎゅっと詰まった「道具箱」のようなものです。Pythonは最初から全ての道具が机に出ているわけではありません。「シャッフル機能を使いたい!」と思ったら、コードの一番上でimport randomと書いて、道具箱を机の上に持ってくる作業が必要になります。

② 「元のデータ」が直接書き換わる(破壊的変更)

ここが一番の注意点です。random.shuffleは、元のリストの中身を直接シャッフルします。「シャッフルされた新しいリスト」を作って返してくれるわけではありません。

これをプログラミング用語で「破壊的変更」と呼びます。例えば、「元の1, 2, 3...という順番も後で使いたい」という場合にそのままシャッフルしてしまうと、元の順番は二度と取り戻せなくなります。

「元の順番を保持したい場合」は、以下のサンプルのように.copy()を使って、一度リストのコピー(複製)を作ってから、そのコピーに対してシャッフルを行いましょう。


import random

# 1. 元のリストを作成
original_list = ["りんご", "バナナ", "みかん", "ぶどう"]

# 2. 元のデータを残すためにコピーを作成
shuffled_list = original_list.copy()

# 3. コピーしたリストの方だけをシャッフル
random.shuffle(shuffled_list)

# 4. 結果を表示して比較
print("元のリスト(順番そのまま):", original_list)
print("シャッフル後のリスト:", shuffled_list)

元のリスト(順番そのまま): ['りんご', 'バナナ', 'みかん', 'ぶどう']
シャッフル後のリスト: ['みかん', 'りんご', 'ぶどう', 'バナナ']

ポイント:未経験者の方は、まず「使う前にimportが必要」ということと、「元のデータが上書きされるから、心配ならコピーをとる」という2点だけを覚えておけば完璧です!

3. 文字列のリストをシャッフルしてみよう

3. 文字列のリストをシャッフルしてみよう
3. 文字列のリストをシャッフルしてみよう

数字だけでなく、文字列のリストもシャッフルできます。たとえば、名前のリストを使ってランダムな順番を作ることができます。


import random

names = ["田中", "佐藤", "鈴木", "高橋"]
random.shuffle(names)
print(names)

['鈴木', '高橋', '田中', '佐藤']

このように、shuffleはデータの種類に関係なく、リストであれば何でもランダムに並び替えることが可能です。

4. シャッフルを使った実用的な例

4. シャッフルを使った実用的な例
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. シャッフルではなく、新しい順番を作りたいときは?

5. シャッフルではなく、新しい順番を作りたいときは?
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と一緒によく使う関数

6. random.shuffleと一緒によく使う関数
6. random.shuffleと一緒によく使う関数

シャッフルした後に、先頭の1人だけを選ぶというような処理をしたいときもあります。

次の例では、シャッフルしたあと最初の1人を「今日の当番」にしています。


import random

students = ["山田", "中村", "鈴木", "井上"]
random.shuffle(students)

print("今日の当番は:", students[0])

今日の当番は: 鈴木

このように、shuffleのあとにインデックス(位置)で取り出せば、ランダムな1人を選ぶことができます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonのカスタム例外を作成する方法を完全解説!初心者でもわかる独自のExceptionクラス入門
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPの真偽値と条件判定をやさしく解説!初心者でもわかるempty・isset・is_nullの使い方
New4
PHP
PHP の file_get_contents() を使ってファイルを読み込む方法!初心者でもできる簡単なファイル操作
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.4
Java&Spring記事人気No4
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
PHP
初心者向けPHP の MySQL のデータを更新する方法(UPDATE 文)完全ガイド
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文を使った条件処理の書き方を完全ガイド!初心者でもわかる使い方