Categories: Python

【Python】重複しない乱数の生成方法

この記事では、重複しない乱数のイテラブルを生成する方法を紹介します。

乱数を生成するには randomモジュール の randint()関数を使います。

import random

random.randint(a, b)

randomモジュールを使った乱数の使い方を解説

それでは、重複しない乱数の生成方法を見ていきましょう!

重複しない乱数

生成した set が指定した長さになるまで乱数を追加し続けることで重複した要素を取り除いたイテラブルを生成することができます。

def rand_nodup(a, b, k):
    r = set()
    while len(r) 

実行結果

[1, 3, 7, -4, -2]

しかし、このままでは範囲以上の個数(k)が指定されると無限ループしてしまう。なので、範囲以上の個数が指定された際は ValueError を投げるようにしましょう。

def rand_nodup(a, b, k):
    if abs(a) + b 

また、randomモジュール の sample()関数 を使うことでも要素が重複しないリストを生成できます。

import random

print(random.sample(range(5), 5))

実行結果

[1, 4, 2, 0, 3]

Linkrandom.sample() — Python ドキュメント

同じ値が連続しない乱数

同じ乱数が連続しないようにするには、生成した乱数と末尾の要素を比較し、異なる値のみ追加することで実現できます。

def rand_nocon(a, b, k):
    r = [random.randint(a, b)]
    while len(r) 

実行結果

[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

random.randint() を 2回使っているのが気になる場合は or を使っても良い。

def rand_nocon(a, b, k):
    r = []
    while len(r) 

まとめ

この記事では、Python で重複しない乱数を生成する方法を解説しました。

文字列や他のオブジェクトで同じことがしたい場合は、random.choice() を使って同じように実装できます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

7か月 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

7か月 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

7か月 ago

【Unity】割合から数値に数値から割合に変換する

この記事では、割合から数値に変換する関数…

7か月 ago

【Python】抽象クラスを定義する方法

この記事では、Pythonで抽象クラスを…

7か月 ago