범위 내에서 'n'개의 고유 난수 생성
- 3 개의 다른 난수 생성 [중복] 2 답변
파이썬에서 범위 내에서 난수를 생성하는 방법을 알고 있습니다.
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]
은 모집단과 표본 크기 를 사용하여 모집단의 임의 구성원을
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
이 방법을 사용하면 특정 범위의 모든 숫자를 임의 순서로 얻을 수 있습니다.그러나 다음
과 같은 숫자 범위에서 필요한 요소 수를 얻는 데 사용할 수 있습니다.
print random.sample(range(numLow, numHigh), 3)
도달 할 때까지 추가 할 수 있습니다
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
'Programming' 카테고리의 다른 글
C는 그렇게 어렵지 않습니다 : void (* (* f []) ()) () (0) | 2020.05.16 |
---|---|
마지막 git add를 어떻게 취소 할 수 있습니까? (0) | 2020.05.16 |
Chrome에서 리소스를로드하지 못했습니다. (0) | 2020.05.16 |
자식 저장소에서 이전 기록을 제거하려면 어떻게합니까? (0) | 2020.05.16 |
구글에서 파이썬을 많이 사용하는 경우 (0) | 2020.05.16 |