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

หาส่วนร่วม (Intersection) ของ Tuple Records ใน Python

บทนำ

การหาส่วนร่วม (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) เร็วกว่ามากสำหรับข้อมูลมาก แต่ไม่รักษาลำดับ