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

Python: แปลง List of Lists เป็น List of Sets

บทนำ

เมื่อต้องการแปลงรายการซ้อนกัน (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+)