Set (เซต)ในนทางคณิตศาสตร์ ไม่ได้มีความหมายที่แน่นอน ผมขออธิบายสั้น ๆ ว่า Set (เซต)เป็นกลุ่มข้อมูล มีรูปแบบดังนี้
โดย 1 กับ 2 คือ สมาชิกที่อยู่ในเซตครับ ในการเขียนโปรแกรมภาษา Python เราสามารถใช้ Set (เซต) ได้ดังนี้{1, 2}
>>> {1, 2} {1, 2}
แปลงข้อมูลเป็นเซต
เราสามารถแปลงข้อมูลเป็นเซตได้ดังนี้แปลงจาก list เป็นเซตได้ดังนี้
จะเห็นได้ว่า ข้อมูลจาก list ได้ถูกแปลงเป็นเซตแล้ว>>> a = set([1,2,3]) >>>> type(a) #เช็คชนิดของข้อมูล <class 'set'> >>> a {1, 2, 3}
แปลงจาก tuples เป็นเซตเราต้องแปลง tuples ให้เป็น list ก่อน จึงจะแปลงเป็นเซตได้ ดังนี้
แปลงจากข้อมูลอื่นเป็นเซต>>> aa =(1, 2, 3, 4, 5) >>> c = list(aa) >>> set(c) {1, 2, 3, 4, 5}
จะเห็นได้ว่า เราแค่ใช้คำสั่ง set() ข้อมูลจะถูกเปลี่ยนเป็นเซต>>> a = "12345" >>> b = set(a) >>> b {'5', '1', '3', '2', '4'}
ข้อมูลที่อยู่ในเซต
เช็ตข้อมูลที่อยู่ในเซตเช็คว่าในเซตนั้น มีสมาชิกอยู่ในเซตนั้นหรือไม่ โดยจะส่งค่าเป็น 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
จะพบว่าสมาชิกถูกลบไปทีละตัวด้วยคำสั่ง pop()>>> b = {2, 3, 5} >>> b.pop() 2 >>> b {3, 5}
ลบสมาชิกทั้งหมดที่อยู่ในเซต
จะเห็นได้ว่า สมาชิกทั้งหมดในเซต b ได้ถูกลบออกจนหมดแล้ว>>> b = {2, 3, 5} >>> b.clear() >>> b set()
การดำเนินการเซต
การดำเนินการเซตทางคณิตศาสตร์มีการดำเนินการดังนี้- ยูเนียน (Set Union)
- อินเตอร์เซกชัน (Set Intersection)
- ผลต่างของเซต (Set Difference)
- ผลต่างสมมาตรของเซต (Symmetric difference)
ยูเนียนเซตใน Python>>> set1 = {1, 2, 3, 4, 5} >>> set2 = {4, 5, 6, 7, 8}
อินเตอร์เซกชันใน Python>>> 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>>> set1 & set2 {4, 5} >>> set1.intersection(set2) # set1 อินเตอร์เซกชัน set2 {4, 5} >>> set2.intersection(set1) # set2 อินเตอร์เซกชัน set1 {4, 5}
ผลต่างของเซต set1 และเซต set2 คือ เซตที่มีสมาชิกของเซต set1 ที่ไม่เป็นสมาชิกของเซต set2 ใน Python เราสามารถดำเนินการผลต่างของเซตได้ด้วยตัวดำเนินการ - หรือคำสั่ง difference() และคำสั่ง difference_update() ได้ดังนี้
ผลต่างสมมาตรของเซต (Symmetric difference) ใน Python>>> 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}
ใน Python เราสามารถดำเนินการผลต่างสมมาตรของเซต (Symmetric difference) โดยใช้ตัวดำเนินการ ^ หรือคำสั่ง symmetric_difference() ได้ดังนี้
Multiple sets ใน Python>>> 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}
เมื่อมีหลาย ๆ เซต ใน Python เราสามารถใช้กับดำเนินการเซตต่าง ๆ เช่น ยูเนียน,อินเตอร์เซกชัน,ผลต่างของเซต,ผลต่างสมมาตรของเซต
Frozenset ใน 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 มีลักษณะเหมือนกับเซต แต่ก็ไม่สามารถเปลี่ยนแปลง ไม่สามารถเพิ่มหรือลบองค์ประกอบได้ เราสามารถใช้มันในทุกลักษณะอื่น ๆ เช่น เซต และเนื่องจากไม่สามารถเปลี่ยนแปลงได้ จึงสามารถใช้เป็นคีย์พจนานุกรมได้
รายละเอียดเพิ่มเติมอ่านได้ที่ https://docs.python.org/3/library/stdtypes.html#set>>> 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'
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)