範囲内で「n」個の一意の乱数を生成する [重複] 質問する

範囲内で「n」個の一意の乱数を生成する [重複] 質問する

Python で範囲内の乱数を生成する方法を知っています。

random.randint(numLow, numHigh)

そして、これをループに入れてn個の数字を生成できることがわかっています

for x in range (0, n):
    listOfNumbers.append(random.randint(numLow, numHigh))

ただし、リスト内の各数字が一意であることを確認する必要があります。多数の条件文以外に、n 個の一意の乱数を生成する簡単な方法はありますか?

重要なのは、リスト内の各数字が他の数字と異なることです。

それで

[12, 5, 6, 1] = 良い

しかし

[12, 5, 5, 1] = 5 が 2 回出現するため、不正解です。

ベストアンサー1

置き換えなしでサンプリングだけが必要な場合:

>>> import random
>>> random.sample(range(1, 100), 3)
[77, 52, 45]

ランダムサンプル母集団とサンプル サイズを受け取りkk母集団のランダムなメンバーを返します。

kが より大きい場合を制御する必要がある場合はlen(population)、 をキャッチできるように準備する必要がありますValueError

>>> try:
...   random.sample(range(1, 2), 3)
... except ValueError:
...   print('Sample size exceeded population size.')
... 
Sample size exceeded population size

おすすめ記事