Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Pythonの初心者・入門者向けの文法解説として、今回はリストの要素をランダムに表示させるための方法を解説します。
今回は、まず
・randomモジュールとそのrand()関数を使って乱数の作成する
・ある数列から1つの整数をランダムに取り出す
の2つを解説し、その後、リストの要素をランダムに1つ表示させるコードを解説します。
なお、Pythonの標準ライブラリにあるrandomモジュールのchoice()関数、sample()関数、choices()関数、さらにはshuffle()を使っても同じようなことがいろいろできますが、今回はそれらの関数は使わない方法でやってみようと思います。
Contents
Python公式ドキュメント:random — 擬似乱数を生成する¶
Pythonには標準でrandomモジュールというものが用意されていて、それを使うと擬似乱数を作ることができます。
まず次のようにモジュールをインポートしましょう。今回はインポートした場合に、randomをrndmという名前で表すように設定しています。
import random as rndm
なぜrndmという名前にしたのか?
それは、次に登場する関数の、random()関数と名前が同じなので混乱を避けるためです。
それでは続いて、小数で乱数を作ることができる関数random()を使ってみましょう。
モジュールの関数を使う場合の書き方は、
モジュール名.関数()
でした。この通りに書いて、次のようになります。
rndm.random() #1回目
これを実行すると、私の場合ですが、
0.15864323375804057
と表示されました。さらに同じコードをもう一度続けて書きましょう。すなわち、
rndm.random() #2回目
そして、2回目のrandom.random()をまた実行してください。私の場合ですが次は
0.5443558567290471
と表示されました。みなさんの環境でも1回目と2回目では異なる数字が出力されたことでしょう。また、数字の並び方にも規則性はなくランダムであることがわかると思います。
では次に、randrange()関数の使い方です。
randrange()関数は、上記公式ドキュメントに次のような解説がなされています。
Python公式ドキュメント:random — 擬似乱数を生成する¶
range(start, stop, step)
の要素からランダムに選ばれた要素を返します。この関数はchoice(range(start, stop, step))
と等価ですが、実際には range オブジェクトを生成しません
これをふまえてrandrange()関数を見ると、その使い方は次のように書かれています。
random.randrange(start, stop[, step])
引数の3つは次のような意味を持ちます。
start | stop | step(省略可能:省略すると自動的に1) |
最初の数字 | 最後の数字 | いくつずつ進むか |
randrange()関数は、
range(start, stop, step)
の要素からランダムに選ばれた要素を返します。
ということですので、まずはrange(start, stop, step)について見てみましょう。たとえば次のように設定みましょう。
start | stop | step |
3 | 11 | 2 |
for i in range(3,9,2):
print(i)
これを実行すると、
3,5,7,9
と出力されます。
stop(最後の数)として「11」を設定していますが、実際にはその数から1つ小さい数、つまり11-1=10の「10」が最後になります。その結果、3から10までの整数の並びができますが、stepで2ずつ進むと設定していますので、
3→5→7→9→11
と進みますが、11は範囲外なので消えます。また10についても、9と10の間は1しかありませんので、step=2という指定に反します。よってそれも消えます。
以上より、
3,5,7,9
が生成されます。
そして、この数列の中から、ランダムに1つの数字を取り出すのがrandrange()関数なんですね。
簡単なコードではありますが、リストの要素をランダム表示するコードを見てください。
#1:まずはrandomモジュールのインポート
import random as rndm
#2:新しいリストを作成。要素はaからeまでの5つの文字
new_list=["a", "b", "c", "d", "e",]
#3:5つの要素をランダムに表示。実行するたびに表示される結果が異なる
for i in range(0,len(new_list)):
rand_num=rndm.randrange(0,len(new_list),1)
print(f'{i}回目の文字は{new_list[rand_num]}')
#1と#2の部分は問題ないと思います。
#3の部分については、まず、
range(0,len(new_list)
これで、数列{0, 1, 2, 3, 4}を作っています。この数列内の数字が、順番に1つずつiに代入されていきます。
次に、
rand_num=rndm.randrange(0,len(new_list),1)
の部分ですが、上述の「整数をランダムに返すrandrange」で説明したように、randrange()の引数は、それぞれ今回は次の通りです。
start | stop | step |
0 | 5 | 1 |
こうすると、数列{0, 1, 2, 3, 4}ができあがり、その中からランダムに1つが返され、その数字が変数rand_numに代入されます。
実際に、#3の部分を1回、2回と実行してみてください。毎回違う結果が表示されるはずです。
たとえば私の場合は、1回目は、
0回目の文字はe
1回目の文字はe
2回目の文字はb
3回目の文字はb
4回目の文字はa
となりましたが、2回めは、
0回目の文字はb
1回目の文字はd
2回目の文字はe
3回目の文字はe
4回目の文字はd
となりました。みなさんの場合はどうなるでしょう?
以上のように、簡単なものではありますが、リストの要素をランダムに表示させるコードができました。なにかの参考になれば幸いです。
プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。
など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。