난수는 Python 표준 라이브러리의 random 모듈에 있는 random(), uniform(), randange() 및 randint() 함수를 사용하여 생성할 수 있습니다.
랜덤 모듈은 표준 라이브러리에 포함되어 있어 추가 설치가 필요하지 않습니다. 물론 수입해야 합니다.
다음 정보가 여기에 제공됩니다.
random.random()
(0.0에서 1.0 사이의 부동 소수점 수)random.uniform()
(모든 범위의 부동 소수점 숫자)- 정규 분포, 가우스 분포 등을 따르는 난수를 생성합니다.
random.randrange()
(임의 범위 및 단계의 정수)random.randint()
(모든 범위의 정수)- 난수를 요소로 사용하여 목록 생성
- 임의의 부동 소수점 숫자 목록
- 정수 난수 목록
- 난수 생성기 초기화(난수 시드 고정)
목록의 요소를 무작위로 추출하거나 정렬하는 방법에 대한 다음 문서를 참조하십시오.
random.random()(0.0에서 1.0 사이의 부동 소수점 수)
random 모듈의 함수 random()은 0.0에서 1.0 사이의 float 유형의 임의 부동 소수점 수를 생성합니다.
import random
print(random.random())
# 0.4496839011176701
random.uniform()(모든 범위의 부동 소수점 숫자)
uniform(a, b)
이 random 모듈의 함수는 다음 범위에서 부동 소수점 수 float 유형의 난수를 생성합니다.
a <= n <= b
b <= n <= a
import random
print(random.uniform(100, 200))
# 175.26585048238275
두 인수는 더 크거나 작을 수 있습니다. 동일하면 당연히 해당 값만 반환합니다. 반환 값은 항상 float입니다.
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
인수는 부동 소수점으로도 지정할 수 있습니다.
print(random.uniform(1.234, 5.637))
# 2.606743596829249
b 값이 범위에 포함되는지 여부는 문서화된 대로 다음 반올림에 따라 다릅니다.a + (b-a) * random.random()
끝점 값 b가 범위에 있는지 여부는 다음 방정식의 부동 소수점 반올림에 따라 다릅니다.
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation
정규 분포, 가우스 분포 등을 따르는 난수를 생성합니다.
위의 random() 및 uniform() 함수는 균일하게 분포된 난수를 생성하지만 다음 분포를 따르는 부동 소수점 숫자를 생성하는 함수도 있습니다.
- 베타 배포:
random.betavariate()
- 지수 분포:
random.expovariate()
- 감마 분포:
random.gammavariate()
- 가우스 분포:
random.gauss()
- 로그 정규 분포:
random.lognormvariate()
- 정규 분포:
random.normalvariate()
- 폰 미제스 분포:
random.vonmisesvariate()
- 파레토 분포:
random.paretovariate()
- 와이블 분포:
random.weibullvariate()
각 분포의 매개변수는 인수로 지정됩니다. 자세한 내용은 공식 문서를 참조하십시오.
random.randrange()(임의 범위 및 단계의 정수)
randrange(start, stop, step)
이 random 모듈의 기능은 다음 요소에서 무작위로 선택된 요소를 반환합니다.range(start, stop, step)
range()와 마찬가지로 start 및 step 인수를 생략할 수 있습니다. 생략하면 start=0 및 step=1입니다.
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
인수 단계는 짝수 또는 홀수 임의 정수 또는 3의 배수인 임의 정수를 생성하도록 설정할 수 있습니다.
예를 들어 start가 짝수이고 step=2인 경우 범위의 짝수 정수만 무작위로 얻을 수 있습니다.
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint()(모든 범위의 정수)
randint(a, b)
이 random 모듈의 함수는 다음 임의의 정수 int를 반환합니다.a <= n <= b
randrange(a, b + 1)
이에 해당합니다. b 값도 범위에 포함됩니다.
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
난수를 요소로 사용하여 목록 생성
이 섹션에서는 표준 라이브러리의 random 모듈을 사용하여 난수를 요소로 포함하는 목록을 생성하는 방법을 설명합니다.
부동 소수점 부동 소수점이 있는 난수 목록
요소가 부동 소수점 난수인 목록을 생성하려면 random() 및 uniform() 함수를 목록 이해 표기법과 결합하십시오.
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
위의 예에서는 range()가 사용되었지만 원하는 수의 요소에 대해 목록과 튜플도 가능합니다. 목록 내포에 대한 자세한 내용은 다음 문서를 참조하십시오.
- 관련 기사:Python 목록 이해 표기법 사용
정수 int 난수 목록
요소가 정수 난수인 목록을 생성할 때 위의 randange() 및 randint()를 목록 이해 표기법과 결합하면 값이 중복될 수 있습니다.
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
중복 없이 임의의 정수 시퀀스를 만들고 싶다면 random.sample()을 사용하여 임의의 범위로 range()의 요소를 추출하십시오.
print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]
print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]
random.sample()에 대한 자세한 내용은 다음 문서를 참조하십시오.
난수 생성기 초기화(난수 시드 고정)
random 모듈의 함수 seed()에 임의의 정수를 제공함으로써 난수 시드를 고정하고 난수 생성기를 초기화할 수 있습니다.
동일한 시드로 초기화한 후에는 항상 같은 방식으로 임의의 값이 생성됩니다.
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025