Python – Set

og:image

Python – Set

การเก็บข้อมูลชนิดเซต

เซต(Set) เป็นรูปแบบของการเก็บข้อมูลชนิดหนึ่ง โดยจะมีการเก็บข้อมูลเป็นกลุ่มของข้อมูล ซึ่งภายในกลุ่มนี้จะไม่มีลำดับของข้อมูล เนื่องจากเป็นกลุ่มข้อมูลที่ไม่มีลำดับของข้อมูลสำหรับอ้างอิง ดังนั้นข้อมูลแต่ละตัวจึงจำเป็นต้องไม่ซ้ำกันและข้อมูลแต่ละตัวภายในเซตนั้นจะทำการเปลี่ยนแปลงไม่ได้ แต่ตัวเซตของกลุ่มข้อมูลนั้นสามารถทำการเปลี่ยนแปลงได้โดยการเพิ่มข้อมูลหรือลบข้อมูลออก

เราสามารถใช้ข้อมูลชนิดเซตเพื่อดำเนินการต่างๆ เช่น การรวมข้อมูล(union), การเลือกข้อมูลที่ซ้ำกัน(intersection), การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference), การเลือกข้อมูลจากทุกเซตเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference), etc.

  1. วิธีการสร้างเซตของข้อมูล

    เราสามารถสร้างเซตของข้อมูลโดยการนำข้อมูลทั้งหมดมาวางไว้ภายในเครื่องหมาย {} แล้วทำการแยกข้อมูลแต่ละตัวด้วยเครื่องหมาย “,” หรืออาจจะสร้างข้อมูลประเภทนี้โดยใช้ฟังก์ชัน set() ในการสร้างข้อมูล

    กลุ่มข้อมูลในเซตนั้นไม่ได้มีการจำกัดจำนวนและยังสามารถบรรจุข้อมูลได้หลายชนิดภายในเซตเดียวกัน เช่น ตัวเลขจำนวนเต็ม(integer), ตัวเลขทศนิยม(float), tuple, ข้อความ(string), etc. แต่ข้อมูลที่บรรจุภายในเซตนั้นไม่สามารถบรรจุข้อมูลประเภทที่แก้ไขข้อมูลได้(mutable) เช่น ลิสต์(list), เซต(set) หรือ ดิกชันนารี(dictionary)

    • การสร้างเซตของข้อมูลโดยใช้เครื่องหมาย {}
      เราสามารถสร้างเซตของข้อมูลโดยการนำข้อมูลทั้งหมดมาวางไว้ภายในเครื่องหมาย {} แล้วทำการแยกข้อมูลแต่ละตัวด้วยเครื่องหมาย “,”
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
      
      # ปรินค์ค่าเพื่อแสดงข้อมูลชื่อผลไม้ ซึ่งเป็นข้อมูลชนิดเซต
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'orange', 'durian', 'apple', 'banana', 'mango', 'grape'}
      
      # กำหนดตัวแปรชนิดเซต เพื่อเก็บข้อมูลราคาของผลไม้ โดยภายในเซต
      # จะประกอบด้วยข้อมูลหลายชนิด
      prices = { 30, 
                 15, 
                 75.0, 
                 "fifty five", 
                 ("B: หนึ่งร้อยบาท", "A: 120.0"), 
                 220.5 
               }
      print( prices )
      # โปรแกรมทำการปรินต์ค่า
      # {('B: หนึ่งร้อยบาท', 'A: 120.0'), 75.0, 'fifty five', 15, 220.5, 30}
      
      
    • การสร้างเซตของข้อมูลโดยใช้ฟังก์ชัน set()
      เราสามารถสร้างเซตของข้อมูลโดยใช้ฟังก์ชัน set() ในการสร้างข้อมูล
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดลิสต์ เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ
      fruits = ["apple", "banana", "orange", "banana"]
      
      # ปรินค์ค่าเพื่อแสดงข้อมูลชื่อผลไม้ ซึ่งเป็นข้อมูลชนิดลิสต์
      print(fruits)
      # โปรแกรมทำการปรินต์ค่า
      # ['apple', 'banana', 'orange', 'banana']
      
      # ทำการสร้างข้อมูลชนิดเซตจากข้อมูลประเภทลิสต์ โดยใช้ฟังก์ชัน set()
      set_of_fruits = set( fruits )
      
      # ปรินค์ค่าเพื่อแสดงข้อมูลชื่อผลไม้ ซึ่งเป็นข้อมูลชนิดเซต
      print(set_of_fruits)
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'apple', 'orange'}
      
      
    • การสร้างเซตเปล่าโดยยังไม่บรรจุข้อมูลโดยใช้ฟังก์ชัน set()
      หากเราต้องการสร้างเซตเปล่าโดยยังไม่มีข้อมูล เราสามารถสร้างด้วยคำสั่ง set() โดยยังไม่ระบุข้อมูลใดๆ ลงไป แต่หากเราสร้างเซตเปล่าโดยใช้เครื่องหมาย {} ข้อมูลดังกล่าวจะถูกแปรผลให้เป็นข้อมูลประเภทดิกชันนารี(dictionary) แทน
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรเพื่อเก็บข้อมูลชื่อของผลไม้ โดยใช้เครื่องหมาย {} 
      # และยังไม่มีการระบุข้อมูลรายชื่อผลไม้
      fruits = {}
      print( type(fruits) )
      # โปรแกรมทำการปรินต์ค่า
      # <class: 'dict'>
      
      # กำหนดตัวแปรเพื่อเก็บข้อมูลชื่อของผลไม้ โดยใช้ฟังก์ชัน set() และยังไม่มี
      # การระบุข้อมูลรายชื่อผลไม้
      fruits  = set()
      print( type(fruits) )
      # โปรแกรมทำการปรินต์ค่า
      # <class: 'set'>
      
  2. การทำการเพิ่มข้อมูลในเซต

    สำหรับข้อมูลชนิดเซตนั้น ข้อมูลแต่ละตัวในเซตไม่สามารถทำการเปลี่ยนแปลงได้ แต่ตัวเซตเองสามารถมีการเปลี่ยนแปลงได้จึงสามารถทำการเพิ่มข้อมูลใหม่ลงไปในเซต แต่เนื่องจากเซตเป็นข้อมูลที่ไม่มีลำดับของข้อมูล ดังนั้นเราไม่สามารถอ้างถึงลำดับของข้อมูลที่ต้องการจะเพิ่มเข้าไปได้

    • การเพิ่มข้อมูลเข้าไปในเซตโดยใชัฟังก์ชัน add()
      สำหรับการเพิ่มข้อมูลเข้าไปในเซตนั้น เราสามารถเพิ่มข้อมูลใดข้อมูลหนึ่งเข้าไปในเซตโดยใช้ฟังก์ชัน add()
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange"}
      
      # ทำการปรินต์ค่าข้อมูลที่มีอยู่ในตัวแปรซึ่งเก็บรายชื่อผลไม้
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'orange', 'apple'}
      
      # ทำการเพิ่มรายชื่อผลไม้ใหม่เข้าไปในเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน add()
      fruits.add("mango")
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'orange', 'mango', 'apple'}
      
      # ทำการเพิ่มรายชื่อผลไม้ที่มีอยู่ในเซตแล้ว เข้าไปในเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน add()
      fruits.add("mango")
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'orange', 'mango', 'apple'}
      
      
    • การเพิ่มข้อมูลเข้าไปในเซตโดยใชัฟังก์ชัน update()
      สำหรับการเพิ่มข้อมูลเข้าไปในเซตนั้น นอกจากการเพิ่มข้อมูลลงไปทีละตัว เรายังสามารถเพิ่มข้อมูลครั้งละหลายตัวเข้าไปในเซตโดยใช้ฟังก์ชัน update() โดยฟังก์ชันนี้ สามารถจะส่งข้อมูลเป็น tuples, ลิสต์(lists), ข้อความ(string) หรือ เซต(set) เข้าไปได้ แต่ข้อมูลใหม่ต้องไม่ซ้ำกับข้อมูลที่มีอยู่เดิม
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange"}
      
      # ทำการปรินต์ค่าข้อมูลที่มีอยู่ในตัวแปรซึ่งเก็บรายชื่อผลไม้ ซึ่งเป็นข้อมูลชนิดเซต
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'orange', 'apple'}
      
      # ทำการเพิ่มลิสต์ของรายชื่อผลไม้ใหม่ เข้าไปในเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน update()
      fruits.update(["grape", "durian"])
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'banana', 'apple', 'orange', 'durian', 'grape'}
      
      # ทำการเพิ่มลิสต์ของรายชื่อผลไม้ใหม่ เข้าไปในเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน update()
      fruits.update(["melon", "rambutan", "pomelo"], 
                      ["watermelon", "raspberries"] )
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'watermelon', 'raspberries', 'banana', 'rambutan', 'apple', 'melon', 'orange', 'durian', 'grape', 'pomelo'}
      
      
  3. การลบข้อมูลออกจากเซต

    เนื่องจากการเก็บข้อมูลชนิดเซตนั้นสามารถมีการเปลี่ยนแปลงของกลุ่มข้อมูลได้(mutable) เราจึงสามารถทำการลบข้อมูลออกจากเซตได้

    • การลบข้อมูลออกจากเซตโดยใช้ฟังก์ชัน discard()
      เราสามารถลบข้อมูลออกจากเซตได้โดยฟังก์ชัน discard() โดยสำหรับฟังก์ชันนี้หากข้อมูลที่ต้องการจะลบไม่ได้บรรจุอยู่ในเซต ก็จะไม่เกิดการเปลี่ยนแปลงใดๆ
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ 
      # โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
      
      # ทำการลบข้อมูลของรายชื่อผลไม้ที่มีอยู่ในเซต ออกจากเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน discard()
      fruits.discard("grape")
      print( fruits ) 
      # โปรแกรมทำการปรินต์ค่า
      # {'mango', 'banana', 'durian', 'apple', 'orange'}
      
      # ทำการลบข้อมูลของรายชื่อผลไม้ที่ไม่มีอยู่ในเซต ออกจากเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน discard()
      fruits.discard("pomelo")
      print( fruits ) 
      # โปรแกรมทำการปรินต์ค่า
      # {'mango', 'banana', 'durian', 'apple', 'orange'}
      
      
    • การลบข้อมูลออกจากเซตโดยใช้ฟังก์ชัน remove()

      เราสามารถลบข้อมูลออกจากเซตได้โดยฟังก์ชัน remove() สำหรับฟังก์ชัน remove() หากข้อมูลที่จะลบไม่ได้บรรจุอยู่ในเซต โปรแกรมจะเกิดข้อผิดพลาดขึ้น เราจึงควรจะทราบข้อมูลที่ต้องการจะลบก่อนเรียกใช้ฟังก์ชันนี้
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
      
      # ทำการลบข้อมูลของรายชื่อผลไม้ที่มีอยู่ในเซต ออกจากเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน remove()
      fruits.remove("grape")
      print( fruits ) 
      # โปรแกรมทำการปรินต์ค่า
      # {'mango', 'banana', 'durian', 'apple', 'orange'}
      
      # ทำการลบข้อมูลของรายชื่อผลไม้ที่ไม่มีอยู่ในเซต ออกจากเซตของรายชื่อผลไม้ 
      # โดยใช้ฟังก์ชัน remove()
      fruits.remove("pomelo")
      print( fruits ) 
      # โปรแกรมทำการปรินต์ค่า
      # เกิดข้อผิดพลาด KeyError: 'pomelo'
      
      
    • การลบข้อมูลออกจากเซตโดยใช้ฟังก์ชัน pop()
      เรายังสามารถใช้ฟังก์ชัน pop() ในการดึงข้อมูลออกมาจากเซต โดยฟังก์ชันนี้นอกจากจะทำการลบข้อมูลออกจากเซตยังทำการคืนค่าข้อมูลดังกล่าวออกมาด้วย แต่เนื่องจากเซตเป็นข้อมูลที่ไม่มีลำดับ เราจึงไม่สามารถรู้ได้ก่อนว่า ข้อมูลใดจะเป็นข้อมูลที่ถูกนำออกมาก่อน/หลัง
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
      
      print( fruits.pop()  )
      # โปรแกรมทำการปรินต์ค่า
      # grape
      
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # {'durian', 'mango', 'apple', 'banana', 'orange'}
      
      
    • การลบข้อมูลทั้งหมดออกจากเซตโดยใช้ฟังก์ชัน clear()
      เราสามารถที่จะลบข้อมูลทั้งหมดออกจากเซตโดยฟังก์ชัน clear()
      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
      # เป็นข้อมูลประเภทข้อความ(string)
      fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
      
      # ทำการลบข้อมูลทั้งหมดออกจากเซต
      print( fruits.clear())
      # โปรแกรมทำการปรินต์ค่า
      # None
      
      # ทำการปรินต์ค่าข้อมูลรายชื่อผลไม้ ซึ่งเป็นข้อมูลชนิดเซต
      print( fruits )
      # โปรแกรมทำการปรินต์ค่า
      # set()
      
      
  4. การใช้ตัวดำเนินการทางคณิตศาสตร์กับข้อมูลแบบเซต

    เราสามารถจะใช้เซตกับตัวดำเนินการทางคณิตศาสตร์เช่น การรวมกันของข้อมูล(union), การหาข้อมูลที่มีความซ้ำซ้อนกัน(intersection), การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) และ การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference) โดยจะใช้เครื่องหมายดำเนินการหรือจะใช้เป็นฟังก์ชันก็ได้

    example 2 set of data

    • การรวมกันของข้อมูล(union)ระว่างเซต
      การรวมกันของข้อมูล(union) คือ การดึงข้อมูลทั้งหมดจากแต่ละเซต โดยถ้าข้อมูลซ้ำกันจะดึงข้อมูลดังกล่าวออกมาเพียงข้อมูลเดียว โดยอาจจะใช้เครื่องหมายดำเนินการ “|” หรือจะใช้ฟังก์ชัน union() ในการรวมข้อมูลได้
      example union betweeen 2 set of data

      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = {"apple", "banana", "orange", "mango"}
      set_b = {"watermelon", "grape", "apple", "mango"}
      
      # การรวมกันของข้อมูล(union) ระหว่างชุดข้อมูลจาก 2 เซตโดยใช้เครื่องหมาย |
      union_data =  set_a | set_b 
      print( union_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'apple', 'banana', 'orange', 'mango', 'grape', 'watermelon'}
      
      # การรวมกันของข้อมูล(union) ระหว่างชุดข้อมูลจาก 2 เซตโดยใช้ฟังก์ชัน union()
      union_data = set_a.union( set_b )
      print( union_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'apple', 'banana', 'orange', 'mango', 'grape', 'watermelon'}
      
      
    • การเลือกข้อมูลที่ซ้ำกัน(intersection) ระหว่างข้อมูลแต่ละเซต
      การเลือกข้อมูลที่ซ้ำกัน(intersection) ระหว่างข้อมูลแต่ละเซต คือ การหาข้อมูลที่มีเหมือนกันระหว่างข้อมูลแต่ละเซต โดยอาจจะใช้เครื่องหมายดำเนินการ “&” หรือจะใช้ฟังก์ชัน intersection() ในการดึงข้อมูลที่มีร่วมกันได้

      example intersection between 2 set of data

      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = {"apple", "banana", "orange", "mango"}
      set_b = {"watermelon", "grape", "apple", "mango"}
      
      # การเลือกข้อมูลที่ซ้ำกัน(intersection) โดยใช้เครื่องหมาย &
      intersection_data = set_a & set_b 
      print( intersection_data )
      # โปรแกรมทำการปรินต์ค่า
      # {"mango", "apple"}
      
      # การเลือกข้อมูลที่ซ้ำกัน(intersection) โดยใช้ฟังก์ชัน intersection
      intersection_data = set_a.intersection( set_b )
      print( intersection_data )
      # โปรแกรมทำการปรินต์ค่า
      # {"mango", "apple"}
      
      
    • การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) ระหว่างข้อมูลแต่ละเซต
      การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) ระหว่างข้อมูลแต่ละเซต คือ การดึงเฉพาะข้อมูลที่มีอยู่ในเซตหนึ่ง แต่ข้อมูลดังกล่าวไม่มีอยู่ในอีกเซตหนึ่งที่ถูกนำมาเปรียบเทียบ โดยอาจจะใช้เครื่องหมายดำเนินการ “-” หรือจะใช้ฟังก์ชัน difference() ในการเปรียบเทียบข้อมูล

      example difference between 2 set of data

      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = {"apple", "banana", "orange", "mango"}
      set_b = {"watermelon", "grape", "apple", "mango"}
      
      # การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) โดยใช้เครื่องหมาย -
      difference_data = set_a - set_b 
      print( difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'orange', 'banana'}
      
      # การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) โดยใช้ฟังก์ชัน difference()
      difference_data = set_a.difference( set_b ) 
      print( difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'orange', 'banana'}
      
      # การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) โดยใช้เครื่องหมาย -
      difference_data = set_b - set_a
      print( difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'watermelon', 'grape'}
      
      # การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) โดยใช้ฟังก์ชัน difference()
      difference_data = set_b.difference( set_a ) 
      print( difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'watermelon', 'grape'}
      
      
    • การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference) ระหว่างข้อมูลแต่ละเซต
      การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference) คือการดึงข้อมูลที่มีอยู่เฉพาะในแต่ละเซตแต่ไม่มีในอีกเซตที่นำมาใช้เปรียบเทียบ และดึงข้อมูลดังกล่าวมาจากแต่ละเซต โดยอาจจะใช้เครื่องหมายดำเนินการ “^” หรือจะใช้ฟังก์ชัน symmetric_difference() ในการดึงข้อมูล

      example symmetric difference between 2 set of data

      ตัวอย่างการใช้งาน

      # กำหนดตัวแปรชนิดเซต(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = {"apple", "banana", "orange", "mango"}
      set_b = {"watermelon", "grape", "apple", "mango"}
      
      # การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น
      # (symmetric difference) โดยใช้เครื่องหมาย ^
      symmetry_difference_data =  set_a ^ set_b 
      print( symmetry_difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'grape', 'orange', 'banana', 'watermelon'}
      
      # การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น
      # (symmetric difference) โดยใช้เครื่องหมายฟังก์ชัน symmetric_difference()
      symmetry_difference_data =  set_a.symmetric_difference( set_b ) 
      print( symmetry_difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'grape', 'orange', 'banana', 'watermelon'}
      
      # การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น
      # (symmetric difference) โดยใช้เครื่องหมาย ^
      symmetry_difference_data = set_b ^ set_a 
      print( symmetry_difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'grape', 'orange', 'banana', 'watermelon'}
      
      # การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น
      # (symmetric difference) โดยใช้เครื่องหมายฟังก์ชัน symmetric_difference()
      symmetry_difference_data = set_b.symmetric_difference( set_a ) 
      print( symmetry_difference_data )
      # โปรแกรมทำการปรินต์ค่า
      # {'grape', 'orange', 'banana', 'watermelon'}
      
      
  5. ฟังก์ชันอื่นๆที่สามารถใช้งานได้กับข้อมูลชนิดเซต

    ฟังก์ชัน รายละเอียด
    add() ทำการเพิ่มข้อมูลเข้าไปในเซต
    clear() ทำการลบข้อมูลทั้งหมดออกจากเซต
    copy() คืนค่าข้อมูลที่คัดลอกจากเซตต้นฉบับแบบไม่ซับซ้อน
    difference() การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล ระหว่าง 2 เซตที่กำหนด(หรือมากกว่านั้น)
    difference_update() ทำการลบข้อมูลทั้งหมดที่มีอยู่ในอีกเซตออก
    discard() ลบข้อมูลออกจากเซตถ้าข้อมูลนั้นเป็นข้อมูลหนึ่งที่บรรจุอยู่ในเซต(และจะไม่ดำเนินการใด ถ้าข้อมูลที่ระบุไม่อยู่ในเซตจริง)
    intersection() คืนค่าข้อมูลเป็นเซตใหม่ซึ่งบรรจุข้อมูลที่ทั้งสองเซตมีร่วมกัน
    intersection_update() ทำการแก้ไขเซตด้วยข้อมูลที่เป็นเซตใหม่ซึ่งบรรจุข้อมูลที่ทั้งสองเซตมีร่วมกัน
    isdisjoint() คืนค่า True ถ้าทั้งสองเซตไม่มีข้อมูลใดๆ ร่วมกันเลย
    issubset() คืนค่า True ถ้าเซตดังกล่าวที่ระบุมีข้อมูลจากอีกเซตหนึ่งบรรจุอยู่ด้วย
    issuperset() คืนค่า True ถ้าข้อมูลในอีกเซตหนึ่งทุกตัว เป็นข้อมูลที่บรรจุอยู่ภายในเซตนี้
    pop() ลบข้อมูลที่ระบุออกจากเซตและคืนค่าข้อมูลที่ทำการลบออกมาด้วย(โดยจะมีการแจ้งข้อผิดพลาด KeyError หากเซตนั้นเป็นเซตว่าง)
    remove() ทำการลบข้อมูลที่ระบุออกจากเซต โดยถ้าข้อมูลนั้นไม่มีอยูในเซตที่ระบุจะแจ้งข้อผิดพลาด keyError
    symmetric_difference() การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference)
    symmetric_difference_update() ทำการแก้ไขข้อมูลเซตด้วย symmetric difference ระหว่างข้อมูลเซตดังกล่าวและข้อมูลเซตเปรียบเทียบ
    union() คืนค่าผลจากการทำการรวมข้อมูลจากทั้งสองเซตออกมาเป็นเซตใหม่
    update() ทำการแก้ไขข้อมูลเซตด้วยการเพิ่มข้อมูลที่ระบุเข้าไปในเซตดังกล่าว
  6. การใช้คีย์เวิรด์ in ในการตรวจสอบว่ามีข้อมูล

    เรายังสามารถใช้งานเซตร่วมกับคีย์เวิร์ด in ซึ่งใช้ตรวจสอบว่าข้อมูลที่เราระบุนั้นมีอยู่ในเซตหรือไม่
    ตัวอย่างการใช้งาน

    # กำหนดตัวแปรชนิดเซต เพื่อทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายใน
    # เป็นข้อมูลประเภทข้อความ(string)
    fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
    
    # ใช้คีย์เวิร์ด in เพื่อตรวจสอบว่าข้อมูลดังกล่าวเป็นข้อมูลที่มีอยู่ภายในเซตหรือไม่
    print("banana" in fruits)
    # โปรแกรมทำการปรินต์ค่า
    # True
    
    # ใช้คีย์เวิร์ด in เพื่อตรวจสอบว่าข้อมูลดังกล่าวเป็นข้อมูลที่มีอยู่ภายในเซตหรือไม่
    print("pomelo" in fruits)
    # โปรแกรมทำการปรินต์ค่า
    # False
    
    # ใช้คีย์เวิร์ด in เพื่อตรวจสอบว่าข้อมูลดังกล่าวเป็นข้อมูลที่มีอยู่ภายในเซตหรือไม่
    print("pomelo" not in fruits)
    # โปรแกรมทำการปรินต์ค่า
    # True
    
    
  7. การวนลูปเพื่ออ่านข้อมูลจากเซต

    เราสามารถใช้งาน for…loop เพื่อทำการวนลูปดูข้อมูลแต่ละตัวจากในเซต
    ตัวอย่างการใช้งาน

    fruits = {"apple", "banana", "orange", "mango", "grape", "durian"}
    
    # ใช้ for...loop เพื่อทำการอ่านค่าข้อมูลแต่ละตัวจากเซตของข้อมูล
    for fruit in fruits:
         print(fruit)
    # โปรแกรมทำการปรินต์ค่า
    # grape
    # apple
    # orange
    # durian
    # banana
    # mango
    
  8. Built-in function ของเซต

    built-in function ของเซตที่สามารถใช้งานได้ เช่น all(), any(), enumerate(), len(), max(), min(), sorted(), sum() และอื่นๆ นั้นสามารถใช้กับเซตได้

    ฟังก์ชัน รายละเอียด
    all() คืนค่า True ถ้าข้อมูลทุกตัวในเซตเป็น True(หรือหากเซตนั้นไม่มีข้อมูลใดๆ เลย)
    any() คืนค่า True ถ้าข้อมูลตัวใดตัวหนึ่งในเซตเป็น True และถ้าหากเซตนั้นเป็นเซตว่าง ให้คืนค่า False
    enumerate() คืนค่า enumerate object โดยจะประกอบด้วยข้อมูลลำดับ(index)และค่าของข้อมูล(value) จากทุกข้อมูลในเซตออกมาเป็นคู่ๆ
    len() คืนค่าจำนวนของข้อมูลที่บรรจุอยู่ในเซต
    max() คืนค่าที่มากที่สุดจากข้อมูลที่บรรจุอยู่ในเซต
    min() คืนค่าที่น้อยที่สุดจากข้อมูลที่บรรจุอยู่ในเซต
    sorted() คืนค่าลิสต์ใหม่ของข้อมูลที่มีการเรียงลำดับแล้ว(โดยข้อมูลในเซตเดิมไม่มีการเปลี่ยนแปลง)
    sum() คืนค่าผลรวมของข้อมูลทุกข้อมูลที่บรรจุอยู่ในเซต
  9. Frozenset

    Frozenset คือคลาสที่มีคุณลักษณะของเซต โดยข้อมูลแต่ละตัวจะไม่สามารถทำการเปลี่ยนแปลงได้เมื่อมีการกำหนดค่าลงไปแล้ว ขณะที่ tuples คือลิสต์ที่ไม่สามารถทำการเปลี่ยนแปลงข้อมูลได้(immutable) สำหรับ frozensets ก็คือเซตที่ไม่สามารถทำการเปลี่ยนแปลงข้อมูลได้(immutable)

    สำหรับข้อมูลชนิดเซตแบบปกติซึ่งจะเปลี่ยนแปลงข้อมูลของตัวเซตได้จึงไม่สามารถสร้าง hash value ได้(unhashable) ทำให้ข้อมูลรูปแบบดังกล่าวจะไม่สามารถใช้เป็นคีย์ของดิกชันนารี(dictionary) แต่สำหรับ frozensets ซึ่งเป็นข้อมูลที่ไม่สามารถเปลี่ยนแปลงได้ดังนั้นจึงสามารถสร้าง hash value ได้(hashable) ดังนั้นข้อมูลชนิดนี้สามารถจะใช้เป็นคีย์ของดิกชันนารีได้

    การสร้างข้อมูลชนิด frozensets สามารถสร้างขึ้นโดยใช้คำสั่ง frozensets() โดยข้อมูลชนิดนี้สามารถรองรับการใช้งานฟังก์ชัน copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetrical_difference() และ union() และเนื่องจากข้อมูลชนิดนี้เป็นข้อมูลชนิดที่ไม่สามารถเปลี่ยนแปลงได้ ฟังก์ชันที่ใช้งานได้ในเซตปกติ เช่น add(), update() หรือ remove() จึงไม่สามารถใช้งานได้

    • ตัวอย่างการใช้งานฟังก์ชัน union(), intersection(), difference(), symmetric_difference() กับ frozenset

      # กำหนดตัวแปรชนิด frozenset(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = frozenset(["apple", "banana", "orange", "mango"])
      set_b = frozenset(["watermelon", "grape", "apple", "mango"])
      
      # ทำการปรินต์ข้อมูลของ frozensets
      print( set_a )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'banana', 'orange', 'mango'})
      
      # ทำการปรินต์ข้อมูลของ frozenset
      print( set_b )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'grape', 'mango', 'watermelon'})
      
      # ทำการรวมข้อมูลระหว่าง frozenset(union) โดยใช้ฟังก์ชัน union()
      print( set_a.union( set_b ) )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'watermelon', 'banana', 'orange', 'grape', 'mango'})
      
      # ทำการหาข้อมูลที่ซ้ำกันระหว่าง frozenset(intersection) โดยใช้ฟังก์ชัน union()
      print( set_a.intersection( set_b ) )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'mango'})
      
      # ทำการเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกกลุ่มข้อมูล(difference) 
      # โดยใช้ฟังก์ชัน difference()
      print( set_a.difference( set_b ) )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'banana', 'orange'})
      
      # ทำการเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจาก
      # เซตอื่น(symmetric difference)โดยใช้ฟังก์ชัน symmetric_difference()
      print( set_a.symmetric_difference( set_b ) )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'watermelon', 'banana', 'orange', 'grape'})
       
      
    • ตัวอย่างการใช้งานฟังก์ชัน disjoint(), issubset() กับ frozenset

      # กำหนดตัวแปรชนิด frozenset(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = frozenset(["apple", "banana", "orange", "mango"])
      set_b = frozenset(["watermelon", "grape", "apple", "mango"])
      
      # ทำการปรินต์ข้อมูลของ frozenset
      print( set_a )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'banana', 'orange', 'mango'})
      
      # ทำการปรินต์ข้อมูลของ frozenset
      print( set_b )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'grape', 'mango', 'watermelon'})
      
      # ทำการตรวจสอบว่าข้อมูลทั้งหมดในแต่ละเซตมีความแตกต่างกันในทุกข้อมูลใช่หรือไม่
      print( set_a.isdisjoint( set_b ) )
      # โปรแกรมทำการปรินต์ค่า
      # False
      
      # กำหนดตัวแปรชนิด frozenset(set_c) เพื่อทำการเก็บข้อมูลชื่อผลไม้
      set_c = frozenset(["banana", "mango"])
      print( set_c )
      
      # ทำการตรวจสอบว่าเซตของข้อมูลที่กำหนด เป็นกลุ่มข้อมูลย่อย(subset) 
      # ของอีกเซตข้อมูลหนึ่งหรือไม่
      print( set_c.issubset( set_a ) )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'banana', 'mango'})
      # True
      
      
    • ตัวอย่างการใช้งานฟังก์ชัน add(), update(), remove() กับ frozenset

      # กำหนดตัวแปรชนิด frozenset(set_a และ set_b) โดยแต่ละเซต
      # จะทำการเก็บข้อมูลชื่อผลไม้ โดยข้อมูลภายในเป็นข้อมูลประเภทข้อความ(string)
      set_a = frozenset(["apple", "banana", "orange", "mango"])
      set_b = frozenset(["watermelon", "grape", "apple", "mango"])
      
      # ทำการปรินต์ข้อมูลของ frozenset
      print( set_a )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'banana', 'orange', 'mango'})
      
      # ทำการปรินต์ข้อมูลของ frozenset
      print( set_b )
      # โปรแกรมทำการปรินต์ค่า
      # frozenset({'apple', 'grape', 'mango', 'watermelon'})
      
      # ทำการเพิ่มข้อมูลชื่อผลไม้ ลงใน frozenset โดยใช้ฟังก์ชัน add()
      set_a.add("rambutan")
      #print( set_a )
      # โปรแกรมทำการปรินต์ค่า
      # AttributeError: 'frozenset' object has no attribute 'add'
      
      # ทำการเพิ่มข้อมูลชื่อผลไม้ ลงใน frozenset โดยใช้ฟังก์ชัน update()
      set_a.update(["apple", "pomelo"])
      #print( set_a ) )
      # AttributeError: 'frozenset' object has no attribute 'update'
      
      # ทำการลบข้อมูลชื่อผลไม้ จากใน frozenset โดยใช้ฟังก์ชัน remove()
      set_a.remove("banana")
      print( "Remove data in set A: {}".format( set_a ) )
      # AttributeError: 'frozenset' object has no attribute 'remove'
      
      

อุปกรณ์วาดภาพประกอบ: draw.io