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

แบ่งลิสต์เป็นคู่ Tuple ทุกแบบที่เป็นไปได้ด้วย Recursive Function

ฟังก์ชัน recursive determine_pairings() สร้างการจับคู่ (pairings) ทุกแบบของสมาชิกในลิสต์ โดยแต่ละสมาชิกจะอยู่ในคู่หรือเดี่ยว ได้ผลลัพธ์เป็นลิสต์ของลิสต์ที่ประกอบด้วยค่าเดี่ยวและ tuple คู่

ตัวอย่างโค้ด

def determine_pairings(lst):
    """คืนลิสต์ของการจับคู่ทุกแบบที่เป็นไปได้"""
    if len(lst) <= 1:
        return [lst]
    
    result = []
    # กรณีสมาชิกแรกอยู่เดี่ยว
    for rest in determine_pairings(lst[1:]):
        result.append([lst[0]] + rest)
    
    # กรณีสมาชิกแรกจับคู่กับสมาชิกอื่นๆ
    for i in range(1, len(lst)):
        pair = (lst[0], lst[i])
        remaining = lst[1:i] + lst[i+1:]
        for rest in determine_pairings(remaining):
            result.append([pair] + rest)
    
    return result

# ทดสอบ
my_list = [56, 31, 78, 0]
print("ลิสต์ต้นฉบับ:", my_list)
pairings = determine_pairings(my_list)
print(f"\nจำนวนการจับคู่ทั้งหมด: {len(pairings)} แบบ")
print("ตัวอย่าง 5 แบบแรก:")
for p in pairings[:5]:
    print(p)

ผลลัพธ์ (บางส่วน)

ลิสต์ต้นฉบับ: [56, 31, 78, 0]
จำนวนการจับคู่ทั้งหมด: 10 แบบ
ตัวอย่าง 5 แบบแรก:
[56, 31, 78, 0]
[56, 31, (78, 0)]
[56, (31, 78), 0]
[56, (31, 0), 78]
[(56, 31), 78, 0]

อัลกอริทึมนี้สร้างการจับคู่แบบไม่มีทิศทาง (undirected pairings) ทุกแบบ