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

ลบลิสต์ซ้ำใน Tuple พร้อมรักษาลำดับใน Python

บทนำ

เมื่อมี tuple ที่แต่ละ element เป็นลิสต์ และต้องการลบลิสต์ที่ซ้ำกันออกไปพร้อมรักษาลำดับเดิม สามารถใช้ set ช่วยจำค่าที่เคยเจอ ร่วมกับ list comprehension

ตัวอย่างโค้ด

my_tuple = ([1, 21, 34], [11, 0, 98], [45, 67, 56])
print("Tuple เดิม:", my_tuple)

# ใช้ set เก็บ tuple version ของลิสต์ที่เคยเจอ
seen = set()
result = [lst for lst in my_tuple 
          if not (tuple(lst) in seen or seen.add(tuple(lst)))]

print("หลังลบซ้ำ (รักษาลำดับ):", result)

ผลลัพธ์

Tuple เดิม: ([1, 21, 34], [11, 0, 98], [45, 67, 56])
หลังลบซ้ำ (รักษาลำดับ): [[1, 21, 34], [11, 0, 98], [45, 67, 56]]

คำอธิบาย

  • ลิสต์ไม่สามารถใส่ใน set ได้โดยตรง (unhashable) ต้องแปลงเป็น tuple ก่อนด้วย tuple(lst)
  • seen.add(tuple(lst)) คืนค่า None ซึ่งเป็น False ใน boolean context
  • not (A or B) ทำงานแบบ short-circuit: ถ้า A จริง (เจอแล้ว) → False → ไม่เอา; ถ้า A เท็จ → ตรวจสอบ B (add เข้า set) → None → False → not False = True → เอา

วิธีอ่านง่ายกว่า

seen = set()
result = []
for lst in my_tuple:
    tup_version = tuple(lst)
    if tup_version not in seen:
        seen.add(tup_version)
        result.append(lst)
print(result)