Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หา Combinations ทั้งหมดจาก 2 ลิสต์ สลับกัน K ตัว (Merge Lists Alternating K Elements)

แนวคิด

รวม 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

  1. หยิบ 2 ตัวจาก list1: 12, 56
  2. หยิบ 2 ตัวจาก list2: 52, 16
  3. หยิบ 2 ตัวจาก list1: 14, 28
  4. หยิบ 2 ตัวจาก list2: 17, 34
  5. ... จนหมด

กรณีลิสต์ยาวไม่เท่ากัน

โค้ดมี if i < len(list1) ป้องกัน index error หากลิสต์ใดลิสต์หนึ่งหมดก่อน