Khi cần tìm tất cả tổ hợp từ hai list theo điều kiện luân phiên K phần tử, ta dùng generator yield và list comprehension.
Ví dụ
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 _ in range(K):
if index_1 < len(my_list_1):
yield my_list_1[index_1]
index_1 += 1
for _ in range(K):
if index_2 < len(my_list_2):
yield my_list_2[index_2]
index_2 += 1
my_list_1 = [12, 56, 14, 28, 61, 73, 59, 90]
my_list_2 = [52, 16, 17, 34, 43, 16, 84, 57]
print("List 1:", my_list_1)
print("List 2:", my_list_2)
K = 1
print("K =", K)
my_result = [element for element in merge_the_vals(my_list_1, my_list_2, K)]
print("Kết quả luân phiên:")
print(my_result)
print("Sau sắp xếp:")
my_result.sort()
print(my_result)
Kết quả đầu ra
List 1: [12, 56, 14, 28, 61, 73, 59, 90] List 2: [52, 16, 17, 34, 43, 16, 84, 57] K = 1 Kết quả luân phiên: [12, 52, 56, 16, 14, 17, 28, 34, 61, 43, 73, 16, 59, 84, 90, 57] Sau sắp xếp: [12, 14, 16, 16, 17, 28, 34, 43, 52, 56, 57, 59, 61, 73, 84, 90]
Giải thích
- Hàm generator
merge_the_valsyield luân phiên K phần tử từ list_1, rồi K phần tử từ list_2. - K=1: xen kẽ 1-1: 12 (list1), 52 (list2), 56 (list1), 16 (list2)...
- K=2: lấy 2 từ list1, 2 từ list2, lặp lại.
- Dừng khi hết list1 (while index_1 < len). List2 có thể dư.
Ứng dụng: Trộn dữ liệu, balanced sampling, interleaving.