บทนำ
เมื่อต้องการแปลงรายการซ้อนกัน (list of lists) ให้กลายเป็นรายการของเซต (list of sets) เพื่อกำจัดค่าซ้ำในแต่ละสับรายการ สามารถใช้ฟังก์ชัน map() ร่วมกับ set() และ list() ได้อย่างมีประสิทธิภาพ
หลักการทำงาน
map(set, my_list): ใช้ฟังก์ชันset()กับแต่ละสับรายการในลิสต์หลักlist(...): แปลง map object กลับเป็นลิสต์
ตัวอย่างโค้ด
my_list = [[2, 2, 2, 2], [1, 2, 1], [1, 2, 3], [1, 1], [0]]
print("List of lists เดิม:")
print(my_list)
# แปลงแต่ละ sublist เป็น set (ลบค่าซ้ำ) แล้วรวมเป็น list ใหม่
my_result = list(map(set, my_list))
print("\nList of sets ผลลัพธ์:")
print(my_result)
ผลลัพธ์
List of lists เดิม:
[[2, 2, 2, 2], [1, 2, 1], [1, 2, 3], [1, 1], [0]]
List of sets ผลลัพธ์:
[{2}, {1, 2}, {1, 2, 3}, {1}, {0}]
วิธีทางเลือกอื่น (List Comprehension)
# วิธีนี้อ่านง่ายกว่าและเป็น Pythonic มากกว่า
my_result = [set(sublist) for sublist in my_list]
print(my_result)
# ผลลัพธ์: [{2}, {1, 2}, {1, 2, 3}, {1}, {0}]
กรณีใช้งานจริง
เทคนิคนี้มีประโยชน์เมื่อ:
- ต้องการหาค่าที่ไม่ซ้ำกันในแต่ละกลุ่มข้อมูล
- เตรียมข้อมูลสำหรับการคำนวณเซต (union, intersection, difference)
- ลดขนาดข้อมูลก่อนประมวลผลต่อ
ข้อควรระวัง
- เซตไม่รักษาลำดับข้อมูล (unordered)
- เซตไม่รองรับค่าที่ไม่สามารถแฮชได้ (unhashable) เช่น list, dict ภายใน
- หากต้องการรักษาลำดับ ใช้
dict.fromkeys()แทน (Python 3.7+)