บทนำ
การหาส่วนร่วม (intersection) ระหว่างสองลิสต์ของ tuples คือการหา tuples ที่ปรากฏในทั้งสองลิสต์ สามารถทำได้ด้วย list comprehension ที่เปรียบเทียบแต่ละคู่
ตัวอย่างโค้ด
list1 = [('Hi', 1), ('there', 11), ('Will', 56)]
list2 = [('Hi', 1), ('are', 7), ('you', 10)]
print("ลิสต์ 1:", list1)
print("ลิสต์ 2:", list2)
# หาส่วนร่วม
intersection = [t1 for t1 in list1 for t2 in list2 if t1 == t2]
print("ส่วนร่วม (Intersection):", intersection)
ผลลัพธ์
ลิสต์ 1: [('Hi', 1), ('there', 11), ('Will', 56)]
ลิสต์ 2: [('Hi', 1), ('are', 7), ('you', 10)]
ส่วนร่วม (Intersection): [('Hi', 1)]
คำอธิบาย
- Nested loop ใน list comprehension: วน t1 ใน list1, วน t2 ใน list2
- ถ้า
t1 == t2(tuple เท่ากันทุก element) ให้เก็บ t1 - วิธีนี้ O(n*m) เหมาะกับข้อมูลเล็ก
วิธีมีประสิทธิภาพมากกว่า (ใช้ Set)
# แปลงเป็น set ของ tuples (ต้องเป็น hashable)
set1 = set(list1)
set2 = set(list2)
intersection = list(set1 & set2) # หรือ set1.intersection(set2)
print("ส่วนร่วม (ใช้ set):", intersection)
# ผลลัพธ์: [('Hi', 1)] - ลำดับอาจเปลี่ยนไป
ใช้ set ได้ O(n+m) เร็วกว่ามากสำหรับข้อมูลมาก แต่ไม่รักษาลำดับ