27 ธันวาคม 2557

Published ธันวาคม 27, 2557 by with 0 comment

Set (เซต) ใน Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปใช้ Set เซตใน Python กันครับ

  Set (เซต)ในนทางคณิตศาสตร์ ไม่ได้มีความหมายที่แน่นอน ผมขออธิบายสั้น ๆ ว่า Set (เซต)เป็นกลุ่มข้อมูล มีรูปแบบดังนี้
{1, 2}
  โดย 1 กับ 2 คือ สมาชิกที่อยู่ในเซตครับ ในการเขียนโปรแกรมภาษา Python เราสามารถใช้ Set (เซต) ได้ดังนี้
>>> {1, 2}
{1, 2}

แปลงข้อมูลเป็นเซต

เราสามารถแปลงข้อมูลเป็นเซตได้ดังนี้
แปลงจาก list เป็นเซตได้ดังนี้
>>> a = set([1,2,3])
>>>> type(a) #เช็คชนิดของข้อมูล
<class 'set'>
>>> a
{1, 2, 3}
จะเห็นได้ว่า ข้อมูลจาก list ได้ถูกแปลงเป็นเซตแล้ว
แปลงจาก tuples เป็นเซตเราต้องแปลง tuples ให้เป็น list ก่อน จึงจะแปลงเป็นเซตได้ ดังนี้
>>> aa =(1, 2, 3, 4, 5)
>>> c = list(aa)
>>> set(c)
{1, 2, 3, 4, 5}
แปลงจากข้อมูลอื่นเป็นเซต
>>> a = "12345"
>>> b = set(a)
>>> b
{'5', '1', '3', '2', '4'}
จะเห็นได้ว่า เราแค่ใช้คำสั่ง set() ข้อมูลจะถูกเปลี่ยนเป็นเซต

ข้อมูลที่อยู่ในเซต

เช็ตข้อมูลที่อยู่ในเซต
เช็คว่าในเซตนั้น มีสมาชิกอยู่ในเซตนั้นหรือไม่ โดยจะส่งค่าเป็น True / False
>>> a_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 1 in a_set
True
>>> 10 in a_set
False
เปลี่ยนแปลงสมาชิกในเซต
เพิ่มข้อมูลเข้าไปในเซต
>>> b = {1, 2, 3}
>>> b[0]
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
b[0]
TypeError: 'set' object does not support indexing
>>> b.add(4) #เพิ่ม 4 เข้าไปเป็นสมาชิกในเซต b
>>> b
{1, 2, 3, 4}
>>> b.update([4,5]) #ข้อมูลประเภท Tuples ถูกเพิ่มเข้าไปเป็นสมาชิกในเซต b
>>> b
{1, 2, 3, 4, 5}
ลบสมาชิกออกจากเซต
  เราสามารถใช้ discard() และ remove() ในการลบสมาชิกได้ หากใช้ remove() ลบสมาชิกถูกลบแล้วจะขึ้นข้อผิดพลาด แตกต่างจาก discard() ซึ่งหากใช้ discard() ลบสมาชิกถูกลบแล้ว จะไม่มีข้อผิดพลาดดังกล่าวขึ้น
>>> b = {1, 2, 3, 4, 5}
>>> b.discard(4)
>>> b
{1, 2, 3, 5}
>>> b.remove(1)
>>> b
{2, 3, 5}
>>> b.remove(1)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    b.remove(1)
KeyError: 1
ลบทีละสมาชิก ทำได้ดังนี้
>>> b = {2, 3, 5}
>>> b.pop()
2
>>> b
{3, 5}
จะพบว่าสมาชิกถูกลบไปทีละตัวด้วยคำสั่ง pop()
ลบสมาชิกทั้งหมดที่อยู่ในเซต
>>> b = {2, 3, 5}
>>> b.clear()
>>> b
set()
จะเห็นได้ว่า สมาชิกทั้งหมดในเซต b ได้ถูกลบออกจนหมดแล้ว

การดำเนินการเซต

การดำเนินการเซตทางคณิตศาสตร์มีการดำเนินการดังนี้
  • ยูเนียน (Set Union)
  • อินเตอร์เซกชัน (Set Intersection)
  • ผลต่างของเซต (Set Difference)
  • ผลต่างสมมาตรของเซต (Symmetric difference)
ซึ่งในการเขียนโปรแกรมในภาษา Python ก็มีการดำเนินการเซตแบบทางคณิตศาสตร์เหมือนกัน กำหนดให้
>>> set1 = {1, 2, 3, 4, 5}
>>> set2 = {4, 5, 6, 7, 8}
ยูเนียนเซตใน Python
  ยูเนียน (Set Union) คือ การรวมสมาชิกสองเซตเข้าด้วยกัน ใน Python เราสามารถใช้ตัวดำเนินการ | หรือคำสั่ง union() ได้ดังนี้
>>> set1 | set2
{1, 2, 3, 4, 5, 6, 7, 8}
>>> set1.union(set2) # set1 ยูเนียน set2
{1, 2, 3, 4, 5, 6, 7, 8}
>>> set2.union(set1) # set2 ยูเนียน set1
{1, 2, 3, 4, 5, 6, 7, 8}
อินเตอร์เซกชันใน Python
  อินเตอร์เซกชัน (ของเซต 2 เซต), อินเตอร์เซกชันของเซต A และเซต B คือ เซตที่ประกอบด้วยสมาชิกของทั้งเซต A และเซต B พูดง่าย ๆ คือ สมาชิกที่ซ้ำกันทั้งสองเซตครับ ใน Python สามารถใช้ตัวดำเนินการ & หรือคำสั่ง intersection() ได้ดังนี้
>>> set1 & set2
{4, 5}
>>> set1.intersection(set2) # set1 อินเตอร์เซกชัน set2
{4, 5}
>>> set2.intersection(set1) # set2 อินเตอร์เซกชัน set1
{4, 5}
ผลต่างของเซตใน Python

  ผลต่างของเซต set1 และเซต set2 คือ เซตที่มีสมาชิกของเซต set1 ที่ไม่เป็นสมาชิกของเซต set2 ใน Python เราสามารถดำเนินการผลต่างของเซตได้ด้วยตัวดำเนินการ - หรือคำสั่ง difference() และคำสั่ง difference_update() ได้ดังนี้
>>> set1 - set2
{1, 2, 3}
>>> set1.difference(set2)
{1, 2, 3}
>>> set2.difference(set1)
{8, 6, 7}
>>> set1.difference_update(set2) #นำผลต่างของเซต set1 กับเซต set2 มาเป็นเซต set1
>>> set1
{1, 2, 3}
ผลต่างสมมาตรของเซต (Symmetric difference) ใน Python
  ใน Python เราสามารถดำเนินการผลต่างสมมาตรของเซต (Symmetric difference) โดยใช้ตัวดำเนินการ ^ หรือคำสั่ง symmetric_difference() ได้ดังนี้
>>> set1 ^ set2
{1, 2, 3, 6, 7, 8}
>>> set1.symmetric_difference(set2)
{1, 2, 3, 6, 7, 8}
>>> set2.symmetric_difference(set1)
{1, 2, 3, 6, 7, 8}
>>> set1.symmetric_difference_update(set2) #นำผลต่างสมมาตรของเซต set1 กับเซต set2 มาเป็นเซต set1 
>>> set1
{1, 2, 3, 6, 7, 8}
Multiple sets ใน Python
  เมื่อมีหลาย ๆ เซต ใน Python เราสามารถใช้กับดำเนินการเซตต่าง ๆ เช่น ยูเนียน,อินเตอร์เซกชัน,ผลต่างของเซต,ผลต่างสมมาตรของเซต
>>> s1 = set([3, 6, 7, 9])
>>> s2 = set([6, 7, 9, 10])
>>> s3 = set([7, 9, 10, 11])
>>> set.intersection(s1, s2, s3) #อินเตอร์เซกชัน
{9, 7}
>>> set.intersection(s1 ^ s2 ^ s3) #ผลต่างสมมาตรของเซต
{9, 11, 3, 7}
>>> set.intersection(s1 | s2 | s3) #ยูเนียนเซต
{3, 6, 7, 9, 10, 11}
>>> set.intersection(s1 - s2 - s3) #ผลต่างของเซต
{3}
Frozenset ใน Python
  Frozenset มีลักษณะเหมือนกับเซต แต่ก็ไม่สามารถเปลี่ยนแปลง ไม่สามารถเพิ่มหรือลบองค์ประกอบได้ เราสามารถใช้มันในทุกลักษณะอื่น ๆ เช่น เซต และเนื่องจากไม่สามารถเปลี่ยนแปลงได้ จึงสามารถใช้เป็นคีย์พจนานุกรมได้
>>> fs = frozenset([2, 3, 4])
>>> s1 = set([fs, 4, 5, 6])
>>> s1
{4, frozenset({2, 3, 4}), 5, 6}
>>> fs.intersection(s1)
frozenset({4})
>>> fs.add(6)
Traceback (most recent call last):
  File "<pyshell#101>", line 1, in <module>
    fs.add(6)
AttributeError: 'frozenset' object has no attribute 'add'
รายละเอียดเพิ่มเติมอ่านได้ที่ https://docs.python.org/3/library/stdtypes.html#set
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)