파이썬에서 리스트의 항목을 무작위로 다루어야 할 때가 종종 있습니다. 예를 들어 카드 게임 덱을 섞거나, 데이터를 임의의 순서로 배치하거나, 표본을 무작위로 뽑는 경우입니다. 이럴 때 파이썬 표준 라이브러리의 random 모듈이 유용하게 사용됩니다. 상황에 따라 활용할 수 있는 대표적인 함수 세 가지를 예제와 함께 살펴보겠습니다.
1. 리스트 전체를 무작위로 섞기: random.shuffle()
shuffle() 함수는 시퀀스의 요소들을 무작위 순서로 재배치합니다. 주의할 점은 이 함수가 원본 리스트를 제자리(in-place)에서 직접 변경하며, 새로운 리스트를 반환하지 않고 None을 반환한다는 것입니다.
>>> import random >>> l1 = ['aa', 22, 'ff', 15, 90, 5.55] >>> random.shuffle(l1) >>> l1 [22, 15, 90, 5.55, 'ff', 'aa'] >>> random.shuffle(l1) >>> l1 ['aa', 'ff', 90, 22, 5.55, 15]
실행할 때마다 결과 순서가 달라지며, 원본 리스트 자체가 섞인 상태로 유지됩니다.
2. 항목 하나를 무작위로 뽑기: random.choice()
리스트에서 단 하나의 항목만 무작위로 추출하고 싶다면 choice() 함수를 사용합니다.
>>> import random >>> l1 = ['aa', 22, 'ff', 15, 90, 5.55] >>> random.choice(l1) 'ff'
호출할 때마다 리스트 내 임의의 요소 하나가 반환되며, 원본 리스트는 변경되지 않습니다.
3. 여러 항목을 중복 없이 추출하기: random.sample()
원본 리스트를 그대로 유지한 채 여러 개의 항목을 무작위로 추출하려면 sample() 함수를 사용합니다. 첫 번째 인자로 리스트를, 두 번째 인자로 추출할 개수를 지정합니다.
>>> random.sample(l1, 3) [90, 'aa', 5.55]
sample()은 비복원 추출 방식으로 동작하기 때문에 같은 항목이 중복해서 선택되지 않으며, 결과는 새로운 리스트로 반환됩니다.
정리
세 함수의 차이를 간단히 요약하면 다음과 같습니다.
- shuffle(): 원본 리스트 자체를 무작위로 섞음 (반환값 없음)
- choice(): 항목 하나만 무작위로 반환
- sample(): 지정한 개수만큼 중복 없이 무작위 추출 (새 리스트 반환)