บทความนี้สาธิตวิธีทำ 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 ระหว่างระบบ