Programming

범위 내에서 'n'개의 고유 난수 생성

procodes 2020. 5. 16. 11:23
반응형

범위 내에서 'n'개의 고유 난수 생성


이 질문에는 이미 답변이 있습니다.

파이썬에서 범위 내에서 난수를 생성하는 방법을 알고 있습니다.

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가 두 번 발생하기 때문에 좋지 않습니다.


교체없이 샘플링 만하면되는 경우 :

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

random.sample

은 모집단과 표본 크기 를 사용하여 모집단의 임의 구성원을

k

반환합니다

k

.

k

보다 큰 경우를 제어해야하는 경우 다음

len(population)

을 잡을 준비가 필요합니다

ValueError

.

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

먼저 데이터 범위를 생성 한 후 다음과 같이 섞습니다.

import random
data = range(numLow, numHigh)
random.shuffle(data)
print data

이 방법을 사용하면 특정 범위의 모든 숫자를 임의 순서로 얻을 수 있습니다.그러나 다음

random.sample

과 같은 숫자 범위에서 필요한 요소 수를 얻는 데 사용할 수 있습니다.

print random.sample(range(numLow, numHigh), 3)

 

set

도달 할 때까지 추가 할 수 있습니다

n

.

setOfNumbers = set()
while len(setOfNumbers) < n:
    setOfNumbers.add(random.randint(numLow, numHigh))

에 맞는 것보다 작은 범위를 가지도록주의하십시오

n

. 영원히 반복되어 삽입 할 새로운 숫자를 찾을 수 없습니다.

n


표준 라이브러리의

random.sample

함수를 사용 하여 모집단 에서 k 개의 요소 를 선택할 수 있습니다 .

import random
random.sample(range(low, high), n)

가능한 범위가 넓은 숫자의 경우

itertools.islice

무한 난수 생성기와 함께 사용할 수 있습니다 .

import itertools
import random

def random_gen(low, high):
    while True:
        yield random.randrange(low, high)

gen = random_gen(1, 100)
items = list(itertools.islice(gen, 10))  # take first 10 random elements

최신 정보

따라서 질문을 업데이트 한 후에는

n

개의 고유 한 고유 번호 가 필요하다는 것이 분명 합니다.

import itertools
import random

def random_gen(low, high):
    while True:
        yield random.randrange(low, high)

gen = random_gen(1, 100)

items = set()

# try to add elem to set until set length is less than 10
for x in itertools.takewhile(lambda x: len(items) < 10, gen): 
    items.add(x)

참고 URL :

https://stackoverflow.com/questions/22842289/generate-n-unique-random-numbers-within-a-range

반응형