-
[Python] random 함수 정리: 난수 생성, 샘플링, 셔플 핵심 사용법업무 자동화/Python 2025. 12. 1. 21:40

1. 기본 난수 생성 함수들
1-1. random.random() — 0.0 이상 1.0 미만 실수
import random for _ in range(3): print(random.random())- 반환 범위: [0.0, 1.0) (1.0은 포함되지 않음)
- 균일 분포(Uniform Distribution)를 따르는 부동소수점 난수
활용 예시:
# 0~100 사이 임의의 실수 x = random.random() * 1001-2. random.randint(a, b) — 양 끝 포함 정수
import random print(random.randint(1, 6)) # 1~6 사이 정수 (주사위 예시)- 반환 범위: [a, b] (a, b 모두 포함)
- “주사위 눈”, “랜덤 인덱스” 같은 정수 난수에 자주 사용
randint(a, b)는 내부적으로randrange(a, b+1)과 비슷하게 동작합니다.1-3. random.randrange(start, stop[, step]) — range 스타일 정수
import random print(random.randrange(10)) # 0~9 중 하나 print(random.randrange(1, 10)) # 1~9 중 하나 print(random.randrange(0, 10, 2)) # 0, 2, 4, 6, 8 중 하나range()와 같은 규칙을 따릅니다.start기본값 0stop은 포함되지 않음step간격으로 값 선택
정리:
- 배열 인덱스나 특정 간격의 정수 값이 필요할 때 사용
randint보다 범위/간격 제어가 조금 더 유연함
1-4. random.uniform(a, b) — 임의 구간의 실수
import random print(random.uniform(1.0, 3.0)) # 1.0 이상 3.0 이하[a, b]또는[b, a]구간에서 실수 난수를 생성- 센서 값, 임의의 좌표, 임의의 길이 등 “연속적인 값”을 만들어야 할 때 사용
2. 시퀀스를 다루는 random 함수들
2-1. random.choice(seq) — 하나 뽑기
import random items = ["apple", "banana", "cherry"] print(random.choice(items))- 리스트, 튜플, 문자열 등에서 원소 하나를 랜덤 선택
- 비어 있는 시퀀스에 대해 호출하면
IndexError발생
2-2. random.choices(seq, k, weights=None) — 여러 개 뽑기 (중복 허용)
import random items = ["red", "green", "blue"] print(random.choices(items, k=5)) weights = [0.7, 0.2, 0.1] print(random.choices(items, weights=weights, k=10))k개수를 지정해 여러 개 선택, 중복 허용weights또는cum_weights로 선택 확률 조정 가능
2-3. random.sample(population, k) — 여러 개 뽑기 (중복 없이)
import random numbers = list(range(1, 46)) lotto = random.sample(numbers, 6) print(sorted(lotto))population에서 서로 다른 원소k개를 선택k는len(population)보다 클 수 없음
2-4. random.shuffle(seq) — 리스트 섞기
import random deck = list(range(1, 11)) random.shuffle(deck) print(deck)- 전달한 리스트를 제자리(in-place) 에서 섞습니다.
- 반환값은
None
3. random.seed(x) — 재현 가능한 난수 시퀀스
import random random.seed(42) print(random.random()) print(random.random()) random.seed(42) print(random.random()) print(random.random())- 같은 seed 값을 주면, 같은 순서의 난수가 재생됩니다.
- 실험 재현, 테스트 코드, 문서 예제 작성에 매우 유용합니다.
실무 패턴:
- 실험 재현이 중요 → 코드 초반에 한 번만
random.seed(고정값) - 유저마다 다른 결과를 원함 → seed를 건드리지 않고 기본값 사용
4. 확률 분포 기반 random 함수들 (간단 소개)
4-1. 정규 분포: random.normalvariate(mu, sigma), random.gauss(mu, sigma)
import random mu = 0.0 # 평균 sigma = 1.0 # 표준편차 x = random.normalvariate(mu, sigma) y = random.gauss(mu, sigma)- 둘 다 정규 분포 난수 생성
- 노이즈 추가, 실험 데이터 모의 생성 등에 활용
4-2. 지수 분포: random.expovariate(lambd)
import random lambd = 0.5 # rate (평균 간격 1 / lambd) x = random.expovariate(lambd)- 사건 사이 시간 간격 모델링 등에 사용
5. 보안 관련 주의: random vs secrets
import random import secretsrandom:- 의사 난수 (PRNG) → 내부 상태 예측 가능
- 보안용(비밀번호, 토큰 생성 등)으로 부적합
secrets:- 암호학적으로 안전한 난수
- 보안 토큰, 인증 코드, 일회용 비밀번호 등에 사용
간단 예시:
import secrets import string alphabet = string.ascii_letters + string.digits password = "".join(secrets.choice(alphabet) for _ in range(12)) print(password)'업무 자동화 > Python' 카테고리의 다른 글
[Python] collections + itertools: 코딩테스트·실무에 유용한 도구 모음 (0) 2025.12.04 [Python] 파일·폴더 자동화: os + shutil + glob 핵심 정리 (0) 2025.12.03 [Python] sys 표준 라이브러리: 인터프리터, 경로, 입출력 제어 (0) 2025.11.29 [Python] pathlib: OS 독립적인 파일·디렉터리 경로 다루기 (0) 2025.11.27 [Python] math 표준 라이브러리 정리: 기본 수학 함수, 상수, 활용 예시 (0) 2025.11.26