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

Python – Cross Pairing ในลิสต์ Tuple

บทความนี้สาธิตวิธีทำ Cross Pairing ระหว่างสองลิสต์ของ Tuple โดยจับคู่เฉพาะ Tuple ที่มีค่าตัวแรก (Index 0) เหมือนกัน

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

my_list_1 = [('Hi', 'Will'), ('Jack', 'Python'), ('Bill', 'Mills'), ('goodwill', 'Jill')]
my_list_2 = [('Hi', 'Band'), ('Jack', 'width'), ('Bill', 'cool'), ('a', 'b')]

print("List 1:", my_list_1)
print("List 2:", my_list_2)

# เรียงลำดับทั้งคู่
my_list_1.sort()
my_list_2.sort()
print("\nList 1 เรียงแล้ว:", my_list_1)
print("List 2 เรียงแล้ว:", my_list_2)

# Cross Pairing: zip ทั้งสองลิสต์, เงื่อนไข a[0] == b[0]
# แล้วจับคู่ a[1] กับ b[1]
my_result = [(a[1], b[1]) for a, b in zip(my_list_1, my_list_2) if a[0] == b[0]]

print("\nผลลัพธ์ Cross Pairing:")
print(my_result)

ผลลัพธ์

List 1: [('Hi', 'Will'), ('Jack', 'Python'), ('Bill', 'Mills'), ('goodwill', 'Jill')]
List 2: [('Hi', 'Band'), ('Jack', 'width'), ('Bill', 'cool'), ('a', 'b')]

List 1 เรียงแล้ว: [('Bill', 'Mills'), ('Hi', 'Will'), ('Jack', 'Python'), ('goodwill', 'Jill')]
List 2 เรียงแล้ว: [('Bill', 'cool'), ('Hi', 'Band'), ('Jack', 'width'), ('a', 'b')]

ผลลัพธ์ Cross Pairing:
[('Mills', 'cool'), ('Will', 'Band'), ('Python', 'width')]

อธิบายการทำงาน

List 1 (Sorted)List 2 (Sorted)a[0]==b[0]?Output Pair
('Bill', 'Mills')('Bill', 'cool')✓ True('Mills', 'cool')
('Hi', 'Will')('Hi', 'Band')✓ True('Will', 'Band')
('Jack', 'Python')('Jack', 'width')✓ True('Python', 'width')
('goodwill', 'Jill')('a', 'b')✗ False(ข้าม)

ข้อจำกัดของ zip()

  • zip() จับคู่ตามลำดับ (Index 0 กับ Index 0, Index 1 กับ Index 1...)
  • ต้อง เรียงลำดับก่อน เพื่อให้ Key ที่ตรงกันอยู่ Index เดียวกัน
  • หากความยาวต่างกัน จะหยุดที่ลิสต์สั้นกว่า

วิธีที่ยืดหยุ่นกว่า: ใช้ Dictionary

# แปลงเป็น Dict: Key → List of Values
dict1 = {}
for k, v in my_list_1:
    dict1.setdefault(k, []).append(v)

dict2 = {}
for k, v in my_list_2:
    dict2.setdefault(k, []).append(v)

# Cross Product สำหรับ Key ที่มีในทั้งสอง
result = []
for key in set(dict1.keys()) & set(dict2.keys()):
    for v1 in dict1[key]:
        for v2 in dict2[key]:
            result.append((v1, v2))

print(result)
# [('Mills', 'cool'), ('Will', 'Band'), ('Python', 'width')]

การประยุกต์ใช้

  • Join ข้อมูลจากสองแหล่งที่มี Key ร่วมกัน
  • Feature Engineering: รวม Features จาก Table ต่างๆ
  • Data Integration: Map ID ระหว่างระบบ