파이썬의 random.choice() 메서드는 리스트에서 요소 하나를 무작위로 선택해 반환합니다. 이 메서드는 문자열, 숫자, 객체 등 어떤 데이터 타입의 항목이 담긴 리스트에도 사용할 수 있으며, 인자로는 무작위 선택을 수행할 리스트 하나만 받습니다.
리스트에 들어 있는 항목 중 하나를 무작위로 골라야 하는 상황은 생각보다 자주 찾아옵니다. 예를 들어 색 맞추기 게임을 만든다면, 사용자가 맞춰야 할 색을 후보 목록에서 임의로 결정하고 싶을 것입니다.
이럴 때 파이썬의 random.choice()와 random.choices() 함수를 활용하면 됩니다. 전자는 시퀀스에서 항목 하나를, 후자는 여러 개의 항목을 무작위로 가져올 수 있게 해줍니다.
이 글에서는 파이썬 random 라이브러리의 기본 개념을 예제와 함께 살펴보고, random.choice() 메서드로 리스트에서 무작위 요소를 가져오는 방법까지 알아보겠습니다.
파이썬 random 모듈 소개
파이썬의 random 모듈은 난수와 관련된 다양한 기능을 제공하는 표준 라이브러리입니다.
이 모듈의 가장 대표적인 용도는 난수 생성으로, randint() 함수를 통해 구현할 수 있습니다. 또한 리스트에서 항목 하나를 무작위로 고르는 choice() 함수와, 여러 개의 무작위 항목을 한 번에 반환하는 choices() 함수도 함께 제공합니다.
random 라이브러리가 유용하게 쓰이는 대표적인 예시는 다음과 같습니다.
- 무작위 숫자를 뽑아 주는 도구
- 색상 목록에서 임의의 색을 선택하는 도구
- 카드 덱에서 무작위로 카드를 뽑는 도구
- 동전 던지기를 시뮬레이션하는 애플리케이션
random 라이브러리의 함수를 사용하기 전에는 먼저 모듈을 코드로 불러와야 합니다. 다음 import 문을 사용하면 됩니다.
import random
random.choice() 메서드란?
파이썬의 random.choice() 함수는 시퀀스에서 요소 하나를 무작위로 골라 반환합니다. 이때 무작위 요소를 가져올 리스트를 인자로 지정해야 하며, 함수는 항상 단일 값을 반환합니다.
함수의 기본 문법은 다음과 같습니다.
random.choice(sequence)
random.choice()는 어떤 데이터 타입의 값이든 반환할 수 있습니다. 따라서 리스트 안에 JSON 객체가 있다면 그 객체를, 숫자가 있다면 그 숫자를 반환할 수 있습니다. 참고로 빈 리스트에 이 메서드를 호출하면 IndexError가 발생하므로, 항상 요소가 있는 시퀀스를 전달해야 합니다.
그럼 실제 예제를 통해 random.choice() 메서드가 어떻게 동작하는지 살펴보겠습니다.
random.choice() 예제
좋아하는 노래 목록에서 노래를 하나 무작위로 골라 주는 애플리케이션을 만든다고 가정해 보겠습니다. 이 애플리케이션이 있으면 "무슨 노래를 듣지?"라는 고민을 손쉽게 해결할 수 있습니다.
먼저 좋아하는 노래 목록부터 만들어 보겠습니다.
favorite_songs = ["Ring of Fire", "9 to 5", "Come on Eileen", "Everybody Wants to Rule the World"]
이 리스트에는 네 곡의 노래가 담겨 있습니다. 이제 random.choice()를 사용해 이 목록에서 노래를 하나 무작위로 선택할 수 있습니다. 코드는 다음과 같습니다.
import random
favorite_songs = ["Ring of Fire", "9 to 5", "Come on Eileen", "Everybody Wants to Rule the World"]
song_to_play = random.choice(favorite_songs)
print("재생할 노래:", song_to_play)
프로그램의 동작을 확인하기 위해 세 번 실행해 보았습니다. 각 실행 결과는 다음과 같습니다.
재생할 노래: Ring of Fire 재생할 노래: Come on Eileen 재생할 노래: Ring of Fire
random.choice() 메서드 덕분에 좋아하는 노래 목록에서 항목 하나를 무작위로 선택할 수 있었습니다.
코드를 하나씩 살펴보겠습니다. 먼저 프로그램 뒤에서 사용할 choice() 함수가 포함된 random 모듈을 임포트했습니다. 그다음 프로그램이 선택 대상으로 삼을 좋아하는 노래 목록을 선언했습니다.
이어서 choice() 메서드로 목록에서 항목 하나를 무작위로 골라 "song_to_play" 변수에 할당했습니다. 마지막으로 콘솔에 "재생할 노래:"라는 문구와 함께 무작위로 선택된 노래를 출력했습니다.
random.choices(): 여러 개 무작위 선택하기
지금까지 random.choice() 메서드로 목록에서 항목 하나만 무작위로 선택해 보았습니다. 그렇다면 여러 개를 한 번에 선택하려면 어떻게 해야 할까요?
이때는 random.choices() 메서드를 사용합니다. 이 메서드는 목록에서 하나 이상의 항목을 무작위로 반환할 수 있습니다. 문법은 다음과 같습니다.
random.choices(sequence, weights=None, cum_weights=None, k=1)
choices() 메서드가 받는 매개변수는 다음과 같습니다.
- sequence: 무작위 항목을 선택할 시퀀스입니다. 문자열, 리스트, 튜플 등이 될 수 있습니다.
- weights: 각 값이 선택될 상대적 확률(가중치)을 지정하는 리스트입니다.
- cum_weights: 각 값의 누적 가중치를 지정하는 리스트입니다.
- k: 시퀀스에서 선택할 무작위 항목의 개수입니다.
이번 예제에서는 "sequence"와 "k" 인자에 초점을 맞춰 살펴보겠습니다.
random.choices() 예제
이번에는 좋아하는 노래 목록에서 세 곡을 무작위로 골라 새 플레이리스트에 추가한다고 가정해 보겠습니다.
다음 프로그램으로 이 작업을 수행할 수 있습니다.
import random
favorite_songs = ["Ring of Fire", "9 to 5", "Come on Eileen", "Everybody Wants to Rule the World"]
songs_to_play = random.choices(favorite_songs, k=3)
for s in songs_to_play:
print(s)
실행 결과는 다음과 같습니다.
Come on Eileen 9 to 5 Ring of Fire
먼저 random 라이브러리를 코드에 임포트했습니다. 그다음 "favorite_songs"라는 파이썬 변수를 선언해 좋아하는 노래 목록을 저장했습니다.
이어서 random.choices() 메서드를 사용해 목록에서 노래 세 곡을 무작위로 선택했으며, 이 메서드는 선택된 노래들로 이루어진 새로운 리스트를 반환했습니다.
마지막으로 파이썬 for 반복문을 사용해 무작위로 생성된 노래 목록의 각 항목을 순회하며 콘솔에 하나씩 출력했습니다. 결과적으로 코드는 재생할 세 곡을 무작위로 담은 리스트를 반환했습니다.
참고로 random.choices()는 복원 추출 방식으로 동작하기 때문에, 같은 항목이 중복해서 선택될 수 있습니다. 중복 없이 추출하려면 random.sample() 함수를 사용하는 것이 좋습니다.
마무리
random.choice() 메서드는 리스트에서 항목 하나를 무작위로 선택하고, random.choices() 메서드는 여러 개의 항목을 무작위로 선택합니다. 두 메서드 모두 리스트나 숫자처럼 어떤 데이터 타입의 값이든 반환할 수 있습니다.
이 글에서는 예제를 통해 이 두 메서드를 사용해 리스트에서 무작위 항목을 가져오는 방법을 알아보았습니다. 이제 여러분도 파이썬 프로처럼 이 메서드들을 자유롭게 활용할 준비가 되었습니다!