บทความนี้สาธิตวิธีกรอง Tuple ที่มีค่าไม่ซ้ำกันจากลิสต์ของ Tuple โดยใช้ set() เพื่อกำจัดค่าซ้ำ
โค้ดตัวอย่าง
my_list = [
(42, 51), (46, 71), (14, 25),
(26, 91), (56, 0), (11, 1), (99, 102)
]
print("ลิสต์ Tuple ต้นฉบับ:")
print(my_list)
# เรียงลำดับ
my_list.sort()
print("\nลิสต์หลังเรียง:")
print(my_list)
# กรองค่าซ้ำ: แปลงเป็น Set แล้วกลับเป็น List
my_result = list(set(my_list))
print("\nผลลัพธ์ (Unique Tuples):")
print(my_result)
ผลลัพธ์
ลิสต์ Tuple ต้นฉบับ:
[(42, 51), (46, 71), (14, 25), (26, 91), (56, 0), (11, 1), (99, 102)]
ลิสต์หลังเรียง:
[(11, 1), (14, 25), (26, 91), (42, 51), (46, 71), (56, 0), (99, 102)]
ผลลัพธ์ (Unique Tuples):
[(11, 1), (26, 91), (42, 51), (46, 71), (56, 0), (14, 25), (99, 102)]
ข้อสังเกตสำคัญ
⚠️ ลำดับไม่คงที่:
set() ไม่รักษาลำดับเดิม ผลลัพธ์อาจสลับตำแหน่ง
วิธีรักษาลำดับ (Order Preserving)
# Python 3.7+ : Dict รักษาลำดับ
my_result = list(dict.fromkeys(my_list))
# หรือใช้ Loop แบบเก่า
seen = set()
my_result = []
for tup in my_list:
if tup not in seen:
seen.add(tup)
my_result.append(tup)
print(my_result) # รักษาลำดับตามที่เจอครั้งแรก
กรอง Tuple ที่ "ภายใน Tuple เอง" ไม่มีค่าซ้ำ
# ตัวอย่าง: (1, 2, 2) มีค่าซ้ำภายใน → ต้องการกรองออก
my_list = [(1, 2), (3, 3), (4, 5, 6), (7, 7, 7), (8, 9)]
# เก็บเฉพาะ Tuple ที่สมาชิกทุกตัวไม่ซ้ำกัน
unique_internal = [t for t in my_list if len(t) == len(set(t))]
print(unique_internal) # [(1, 2), (4, 5, 6), (8, 9)]
การประยุกต์ใช้
- ลบข้อมูลซ้ำใน Dataset
- การหา Unique Edges ใน Graph (Undirected)
- ทำความสะอาดข้อมูลก่อน Feed เข้า ML Model