파이썬에서 특정 조건에 따라 두 개의 리스트에 담긴 요소들을 조합하거나 병합해야 할 때가 있습니다. 이럴 때 간단한 반복문과 제너레이터(yield) 키워드, 그리고 인덱싱을 함께 활용하면 원하는 결과를 손쉽게 얻을 수 있습니다.
예제
다음은 이를 구현한 예제입니다 −
print("메서드 정의 시작")
def merge_the_vals(my_list_1, my_list_2, K):
index_1 = 0
index_2 = 0
while(index_1 < len(my_list_1)):
for i in range(K):
yield my_list_1[index_1]
index_1 += 1
for i in range(K):
yield my_list_2[index_2]
index_2 += 1
print("메서드 정의 끝")
my_list_1 = [12, 56, 14, 28, 61, 73, 59, 90]
my_list_2 = [52, 16, 17, 34, 43, 16, 84, 57]
print("첫 번째 리스트 : ")
print(my_list_1)
print("두 번째 리스트 : ")
print(my_list_2)
K = 2
print("K의 값 : ")
print(K)
my_result = [element for element in merge_the_vals(my_list_1, my_list_2, K)]
print("결과 리스트 : ")
print(my_result)
print("정렬 후 리스트 : ")
my_result.sort()
print(my_result)
출력
메서드 정의 시작 메서드 정의 끝 첫 번째 리스트 : [12, 56, 14, 28, 61, 73, 59, 90] 두 번째 리스트 : [52, 16, 17, 34, 43, 16, 84, 57] K의 값 : 2 결과 리스트 : [12, 56, 52, 16, 14, 28, 17, 34, 61, 73, 43, 16, 59, 90, 84, 57] 정렬 후 리스트 : [12, 14, 16, 16, 17, 28, 34, 43, 52, 56, 57, 59, 61, 73, 84, 90]
설명
두 개의 리스트와 값 K를 매개변수로 받는 제너레이터 함수
merge_the_vals를 정의합니다.인덱스가 리스트의 길이보다 작은 동안, 첫 번째 리스트에서 K개, 이어서 두 번째 리스트에서 K개의 요소를
yield연산자로 순차적으로 반환합니다.함수 외부에서 정수형 요소를 가진 두 개의 리스트를 정의하고 콘솔에 출력합니다.
K 값을 지정하고 화면에 표시합니다.
리스트 컴프리헨션을 사용해 필요한 매개변수를 전달하며 함수를 호출하고, 생성되는 요소들을 새 리스트에 담습니다.
그 결과를 변수
my_result에 저장한 뒤 콘솔에 출력합니다.마지막으로
sort()메서드를 사용해 결과를 오름차순으로 정렬한 후 콘솔에 다시 출력합니다.
핵심 포인트
이 예제의 핵심은 제너레이터 함수입니다. yield를 사용하면 모든 결과를 한꺼번에 메모리에 올리지 않고 요소를 하나씩 생성할 수 있어, 대용량 데이터를 다룰 때도 효율적입니다. 또한 K 값만 바꾸면 두 리스트를 섞는 방식을 유연하게 조절할 수 있으며, 마지막에 sort()를 적용하면 원하는 순서대로 데이터를 깔끔하게 정렬할 수 있습니다.