리스트의 요소들을 무작위(Random)로 선택하는 방법을 예제를 통해서 알아보겠습니다.
1. 리스트에서 랜덤으로 1개의 요소 추출
random.sample(list, n)
은 리스트에서 1개의 요소를 무작위로 선택하여 리스트로 리턴합니다.
아래 예제를 보시면, 1개의 요소가 추출되며 리스트로 리턴됩니다. 또한, 원본 리스트에서 무작위로 추출된 값이 삭제되지도 않습니다.
import random
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# sample() 함수로 리스트에서 랜덤으로 하나의 요소 추출
random_element = random.sample(my_list, 1)
print(random_element)
random_element = random.sample(my_list, 1)
print(random_element)
random_element = random.sample(my_list, 1)
print(random_element)
print("original list:", my_list)
실행 결과
[3]
[2]
[3]
original list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2. 리스트에서 랜덤으로 3개의 요소 추출 (중복 허용 안함)
만약 3개의 요소를 랜덤으로 샘플링하고 싶을 때는 sample(list, 3)
처럼 3을 입력하면 됩니다. 그리고, random.sample()
는 중복된 값을 추출하지 않습니다.
예를 들어, 3개를 추출할 때 확률에 따라서 [1, 1, 1]
이 추출될 수 있지만 내부적으로 이런 것을 허용하지 않도록 구현되어 이런 일이 발생하지 않습니다.
아래 예제처럼, 3개의 요소가 무작위로 추출되어 리스트로 리턴됩니다. 또한 원본 리스트의 값들은 변하지 않습니다.
import random
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# sample() 함수로 리스트에서 랜덤으로 3개의 요소 추출
random_element = random.sample(my_list, 3)
print(random_element)
random_element = random.sample(my_list, 3)
print(random_element)
random_element = random.sample(my_list, 3)
print(random_element)
print("original list:", my_list)
실행 결과
[9, 10, 4]
[6, 7, 2]
[1, 7, 8]
original list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
랜덤 추출한 요소들을 원본 리스트에서 제거
랜덤으로 추출한 요소들을 원본 리스트에서 제거하고 싶을 때는, 아래와 같이 반복문으로 원본 리스트에서 제거하도록 구현할 수 있습니다.
import random
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# sample() 함수로 리스트에서 랜덤으로 하나의 요소 추출
random_elements = random.sample(my_list, 3)
print(random_elements)
# 샘플링한 요소들을 원래 리스트에서 제거
for element in random_elements:
my_list.remove(element)
print("original list:", my_list)
실행 결과
[3, 2, 8]
original list: [1, 4, 5, 6, 7, 9, 10]
3. 리스트에서 랜덤으로 3개의 요소 추출 (중복 허용)
만약 3개의 요소를 뽑을 때, 중복된 값도 뽑힐 수 있도록 하려면 아래와 같이 구현하면 됩니다.
random.choice(list)
는 리스트에서 1개의 요소를 랜덤으로 뽑는데, 이걸 독립적으로 3번 수행하고 리스트에 결과를 추가하면 됩니다.
아래 예제에서는 리스트 컴프리헨션을 이용하여 반복되도록 하였습니다.
import random
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# sample() 함수로 리스트에서 랜덤으로 num 개수의 요소 추출 (중복 허용)
num = 3
random_elements = [random.choice(my_list) for i in range(num)]
print(random_elements)
print("original list:", my_list)
실행 결과
[3, 8, 3]
original list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]