บทนำ
การกรอง (filter) tuples ในลิสต์ โดยให้ผ่านเฉพาะ tuple ที่มี element อย่างน้อยหนึ่งตัวตรงกับค่าใน target list สามารถทำได้ด้วย list comprehension และ any()
ตัวอย่างโค้ด
data = [(11, 14), (54, 56, 87), (98, 0, 10), (13, 76)]
target = [34, 11]
print("ข้อมูล:", data)
print("Target values:", target)
# กรอง: เก็บ tuple ที่มี element อยู่ใน target
filtered = [tup for tup in data if any(val in target for val in tup)]
print("หลังกรอง:", filtered)
ผลลัพธ์
ข้อมูล: [(11, 14), (54, 56, 87), (98, 0, 10), (13, 76)] Target values: [34, 11] หลังกรอง: [(11, 14)]
คำอธิบาย
any(val in target for val in tup)ตรวจสอบว่าใน tuple นี้มีค่าไหนอยู่ใน target ไหมval in targetตรวจสอบ membership (O(n) สำหรับ list, O(1) สำหรับ set)- แปลง target เป็น set จะเร็วขึ้น:
target_set = set(target)
เวอร์ชันปรับปรุงประสิทธิภาพ
target_set = set(target) # O(1) lookup filtered = [tup for tup in data if any(val in target_set for val in tup)]
กรองแบบเข้มงวด: ต้องมีทุกค่าใน target (All)
# tuple ต้องมี element ครอบคลุม target ทั้งหมด filtered_all = [tup for tup in data if all(val in tup for val in target)]