본문으로 건너뛰기

Python - 리스트 랜덤 추출, 선택

리스트의 요소들을 무작위(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]