แนวคิด
รวม 2 ลิสต์โดยสลับกัน K ตัวจากลิสต์แรก แล้ว K ตัวจากลิสต์ที่สอง ทำซ้ำจนหมด ใช้ generator yield
ตัวอย่างโค้ด
def merge_the_vals(list1, list2, K):
i = j = 0
while i < len(list1) or j < len(list2):
for _ in range(K):
if i < len(list1):
yield list1[i]
i += 1
for _ in range(K):
if j < len(list2):
yield list2[j]
j += 1
list1 = [12, 56, 14, 28, 61, 73, 59, 90]
list2 = [52, 16, 17, 34, 43, 16, 84, 57]
K = 2 # โค้ดต้นฉบับ K=1 แต่ output แสดง K=2
print("List 1:", list1)
print("List 2:", list2)
print("K =", K)
result = list(merge_the_vals(list1, list2, K))
print("ผลลัพธ์:", result)
result.sort()
print("หลังเรียง:", result)
ผลลัพธ์
List 1: [12, 56, 14, 28, 61, 73, 59, 90]
List 2: [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=2
- หยิบ 2 ตัวจาก list1: 12, 56
- หยิบ 2 ตัวจาก list2: 52, 16
- หยิบ 2 ตัวจาก list1: 14, 28
- หยิบ 2 ตัวจาก list2: 17, 34
- ... จนหมด
กรณีลิสต์ยาวไม่เท่ากัน
โค้ดมี if i < len(list1) ป้องกัน index error หากลิสต์ใดลิสต์หนึ่งหมดก่อน