[PYTHON] 범위 내에서 'n'개의 고유 난수 생성 [duplicate]
PYTHON범위 내에서 'n'개의 고유 난수 생성 [duplicate]
나는 파이썬에서 범위 내에서 난수를 생성하는 법을 안다.
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 번이 두 번 나타나기 때문에 나쁘다.
해결법
-
==============================
1.대체없이 샘플링 만하면됩니다.
대체없이 샘플링 만하면됩니다.
>>> 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
-
==============================
2.먼저 데이터 범위를 생성 한 후 다음과 같이 임의로 섞습니다.
먼저 데이터 범위를 생성 한 후 다음과 같이 임의로 섞습니다.
import random data = range(numLow, numHigh) random.shuffle(data) print data
이렇게하면 특정 범위의 모든 숫자가 임의의 순서로 나타납니다.
하지만 random.sample을 사용하면 다음과 같은 숫자 범위에서 필요한 요소의 수를 얻을 수 있습니다.
print random.sample(range(numLow, numHigh), 3)
-
==============================
3.n에 도달 할 때까지 세트에 추가 할 수 있습니다.
n에 도달 할 때까지 세트에 추가 할 수 있습니다.
setOfNumbers = set() while len(setOfNumbers) < n: setOfNumbers.add(random.randint(numLow, numHigh))
n에 들어 맞는 범위보다 작은 범위에주의하십시오. 영원히 반복 할 것이고, n까지 삽입 할 새 번호를 찾을 수 없습니다.
-
==============================
4.표준 라이브러리의 random.sample 함수를 사용하여 모집단에서 k 요소를 선택할 수 있습니다.
표준 라이브러리의 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
최신 정보
그래서, 질문을 갱신 한 후에, 이제는 명확하고 고유 한 (고유 한) 번호가 필요합니다.
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)
from https://stackoverflow.com/questions/22842289/generate-n-unique-random-numbers-within-a-range by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Windows에서 fcntl 대체 (0) | 2018.10.04 |
---|---|
[PYTHON] 소수점 이하의 소수점을 반올림하는 법? (0) | 2018.10.04 |
[PYTHON] 파이썬 사전을 XML로 직렬화 [닫힘] (0) | 2018.10.04 |
[PYTHON] 안에있는 문자열을 올바르게 정렬하는 방법? [복제] (0) | 2018.10.04 |
[PYTHON] 모든 스레드가 완료 될 때까지 파이썬 다중 스레드 대기 (0) | 2018.10.04 |