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

Python – กรอง Tuple ที่มีค่าไม่ซ้ำ (Unique Valued Tuples)

บทความนี้สาธิตวิธีกรอง 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