Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 K 크기의 무작위 리스트 N개 생성하는 프로그램

K 크기의 리스트를 N개 무작위로 생성해야 하는 경우, 원본 리스트의 값을 섞은(shuffle) 뒤 필요한 만큼 잘라내어 결과를 반환하는 제너레이터 함수를 정의하면 간단하게 해결할 수 있습니다.

예제

아래는 실제 구현 예시입니다.

from random import shuffle

def gen_random_list(my_val, K):
   while True:
      shuffle(my_val)
      yield my_val[:K]

my_list = [12, 45, 76, 32, 45, 88, 99, 0, 1]
print("The list is ")
print(my_list)

K, N = 4, 5
print("The value of K is ")
print(K)
print("The value of N is ")
print(N)

my_result = []
for elem in range(0, N):
   my_result.append(next(gen_random_list(my_list, K)))

print("The result is ")
print(my_result)

출력

The list is
[12, 45, 76, 32, 45, 88, 99, 0, 1]
The value of K is
4
The value of N is
5
The result is
[[88, 76, 99, 12], [12, 99, 32, 76], [32, 76, 12, 99], [32, 45, 0, 12], [76, 0, 1, 45]]

코드 설명

  • 필요한 패키지(random.shuffle)를 환경에 임포트합니다.

  • 리스트와 K를 매개변수로 받는 gen_random_list 메서드를 정의합니다.

  • 무한 반복문 안에서 shuffle 메서드로 리스트 요소의 순서를 무작위로 섞고, yield와 슬라이싱([:K])을 사용해 앞에서부터 K개의 요소를 반환합니다.

  • 메서드 외부에서 원본 리스트를 정의하고 콘솔에 출력합니다.

  • K와 N의 값을 설정한 뒤 콘솔에 표시합니다.

  • 결과를 담을 빈 리스트를 하나 선언합니다.

  • 0부터 N까지 반복하면서 next()로 제너레이터를 호출하여 새로운 무작위 리스트를 얻고, 그 결과를 빈 리스트에 추가(append)합니다.

  • 최종 결과 리스트를 콘솔에 출력합니다.

핵심 포인트

shuffle()은 원본 리스트 자체를 제자리(in-place)에서 변경한다는 점에 유의하세요. 또한 yield를 사용했기 때문에 gen_random_list는 일반 함수가 아닌 제너레이터(generator)로 동작합니다. next()를 호출할 때마다 실행이 재개되어 리스트를 다시 섞고 새로운 K 크기의 부분 리스트를 반환하므로, 매번 서로 다른 무작위 조합을 얻을 수 있습니다.