Pythonでリストをシャッフルする方法|random.shuffle()の使い方を徹底解説
Pythonのrandom.shuffle()メソッドは、リスト内の要素の順序をランダムに入れ替えるための関数です。インデックス操作と組み合わせれば、リストからランダムに要素を1つ取り出すことにも活用できます。このメソッドは、並べ替えたいリストを1つの引数として受け取ります。
リストの要素の順序をランダムにしたい場面は意外と多くあります。たとえば、店舗の抽選会で当選者を選ぶプログラムを作るとしましょう。参加者の名前が入ったリストをランダムに並べ替えて、当選者を決定したいはずです。
そんなときに役立つのがrandom.shuffle()メソッドです。このメソッドはPythonのrandomモジュールに含まれており、リストの要素をランダムな順序に並べ替えるために使われます。本記事では、random.shuffle()メソッドの使い方について詳しく解説します。
Pythonでリストをシャッフルする方法
random.shuffle()は、リスト内の要素をランダムな順序に並べ替えるPythonの関数です。リストからランダムに要素を取得したいアプリケーションなどで便利です。なお、このメソッドは元のリストそのものを変更する「破壊的な処理」であり、新しいリストを作成するわけではない点に注意してください。
Pythonのリストはデータのコレクションを格納するもので、「順序付き」であるという特徴があります。つまり、リストに格納した要素は、その位置に保持され続けます。これはリストの重要な特徴ですが、プログラムによってはリストの順序をシャッフルしたいケースもあります。
random.shuffle()は、Pythonで疑似乱数生成器を実装しているrandomライブラリの一部です。そのため、random.shuffle()メソッドを使う前に、まずrandomライブラリをコードにインポートする必要があります。以下の1行を追加しましょう。
import random
random.shuffle()メソッドの構文は次のとおりです。
import random
random.shuffle(list_name, function)
random.shuffle()メソッドは2つのパラメータを受け取ります。
- list_name:シャッフルしたい対象(必須)。リストなどのミュータブル(変更可能)なシーケンスを指定します。
- function:0.0〜1.0の範囲の浮動小数点数を返す関数の名前(任意)。
functionパラメータはあまり使われません。特定の値に重みをつける独自のシャッフルアルゴリズムを採用したい場合にのみ指定するものです。そのため、本記事ではfunctionパラメータについては詳しく扱いません。
また、random.shuffle()は元のデータを直接変更するメソッドです。文字列やタプルのようなイミュータブル(変更不可)なオブジェクトには使用できず、新しい文字列やタプルが生成されることもありません。シャッフルできるのはリストのようなミュータブルなシーケンスだけなので、覚えておきましょう。
random.shuffle()の使用例
ここでは、店舗で抽選会を行うシナリオを想定します。1等賞者には店内の商品に使える100ドル分のギフトカード、2等賞者には50ドル分、3等賞者には25ドル分のギフトカードが贈られます。
抽選に応募した全員の名前が入ったリストがあり、このリストをランダムな順序に並べ替えて当選者を決定するのが目標です。そこで、random.shuffle()メソッドを使います。
リストの順序をランダムに入れ替えて当選者を特定するためのコードは、以下のようになります。
import random
raffle_entrants = ['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
print('応募者(元の順序)')
print(raffle_entrants)
print('当選者(ランダムな順序)')
random.shuffle(raffle_entrants)
print(raffle_entrants)
このコードを実行すると、次のような結果が出力されます。
応募者(元の順序)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
当選者(ランダムな順序)
['Adie Paulson', 'Braden Cox', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Lindsay Knapp']
最初の行では、import文を使ってrandomライブラリをインポートしています。このライブラリには、後ほどコード内で使うrandom.shuffle()メソッドが含まれています。次に、抽選への応募者全員の名前を格納した変数raffle_entrantsを宣言します。
続く2行では、「応募者(元の順序)」というメッセージと、raffle_entrantsリストの中身をコンソールに出力しています。これにより、プログラムがシャッフルする前のリストの状態を確認できます。
その後、「当選者(ランダムな順序)」というメッセージを出力し、random.shuffle()メソッドでraffle_entrantsリストの内容をシャッフルします。最後に、シャッフル後のraffle_entrantsリストを出力して完了です。
これで、ランダムに並べ替えられた名前のリストが完成しました。上記の出力例では、Braden Coxが1等、Thomas Craneが2等、Leonardo Downsが3等となっています。
コードの検証
同じコードをもう一度実行すると、新しく並べ替えられたリストが得られます。2回目に実行した結果がこちらです。
応募者(元の順序)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
当選者(ランダムな順序)
['Braden Cox', 'Lindsay Knapp', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Adie Paulson']
このように、random.shuffle()を使用するたびに、毎回異なるランダムな順序(正確には疑似ランダムな順序)のリストが返されることがわかります。
まとめ
Pythonでは、random.shuffle()メソッドを使うことで、リスト内の要素の順序をランダムに入れ替えることができます。今回の例では、random.shuffle()を活用して、応募者リストから抽選の当選者をランダムに選ぶプログラムを作成しました。
さらにPythonプログラミングを学びたい方は、ぜひ「Pythonの学び方ガイド」も参考にしてください。効率的な学習のコツや、知識を深めるのに役立つ学習リソース・講座の一覧をまとめています。
-
Pythonでリストを逆順にする方法:reverse()・reversed()・スライスを徹底解説
Pythonでは、組み込みメソッドのreverse()やreversed()を使って、リストを簡単に逆順にできます。これらのメソッドは、元のリストオブジェクトの要素を反転させるための標準的な手段です。 はじめに リストの反転(リバース)は、あらゆるプログラミング言語で頻繁に使われる基本的な操作の一つです。このチュートリアルでは、Pythonでリストを逆順にする最も効果的な方法を、サンプルコードとともに詳しく解説します。 例えば、顧客名のリストが五十音の逆順になっていて、正しい順序で表示したいとしましょう。その場合はリストを反転する必要があります。また、長いリストの末尾にあるデータを素
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し