บ่อยครั้งที่เมื่อคุณทำงานกับข้อมูล คุณจะต้องการจัดเก็บลิสต์ข้อมูลที่ไม่สามารถมีค่าซ้ำได้ และค่าที่ไม่สามารถเปลี่ยนแปลงได้ ตัวอย่างเช่น หากคุณกำลังทำลิสต์รหัสการซื้อที่ร้านขายของชำ คุณจะต้องการให้แต่ละ ID เป็นเอกลักษณ์ และคุณไม่ต้องการให้ใครเปลี่ยนค่าในลิสต์ของคุณได้
นั่นคือที่มาของ Python set object Set เป็นคอลเลกชันของรายการที่ไม่มีลำดับ ที่สามารถมีค่าเฉพาะค่าที่ไม่ซ้ำกันได้ (unique values)
บทช่วยสอนนี้จะอภิบายพร้อมอ้างอิงตัวอย่าง พื้นฐานของ Python sets และวิธีที่คุณสามารถดำเนินการทั่วไปอย่างการเพิ่มและลบค่าบน set
Python Sets
โครงสร้างข้อมูล set ในตัวของ Python คล้ายกับแนวคิดของเซตในคณิตศาสตร์
Python sets สามารถมีองค์ประกอบศูนย์หรือมากกว่า และไม่มีลำดับที่กำหนดสำหรับแต่ละองค์ประกอบในเซต ทุกองค์ประกอบที่จัดเก็บภายในเซตเป็นเอกลักษณ์ (unique) ดังนั้นไม่สามารถมีค่าซ้ำได้ และแต่ละค่าตัวเดียวในเซตไม่สามารถเปลี่ยนแปลงได้
แม้ค่าตัวเดียวในเซตจะไม่สามารถเปลี่ยนแปลงได้ เซตเองก็สามารถเปลี่ยนแปลงได้ นี่หมายความว่าเราสามารถเพิ่มหรือลบรายการจากเซตของเราได้
โครงสร้างเซตมีประโยชน์เพราะมันมาพร้อมกับการดำเนินการทางคณิตศาสตร์จำนวนหนึ่งที่เราสามารถใช้ทำงานกับข้อมูลที่เราจัดเก็บในเซต
สร้าง Python Set
ใน Python เซตถูกกำหนดเป็นลิสต์ของรายการ (หรือ "องค์ประกอบ") ที่คั่นด้วยจุลภาค ลิสต์จะถูกล้อมภายในวงเล็บปีกกา ({})
Python sets สามารถจัดเก็บรายการได้ทุกจำนวน และแต่ละรายการภายในเซตสามารถใช้ชนิดข้อมูลที่ต่างกันได้ ดังนั้น เซตสามารถจัดเก็บทั้งจำนวนเต็มหรือสตริง หรือ สตริง ทศนิยม และทูเพิล อย่างไรก็ตาม เซตไม่สามารถจัดเก็บชนิดข้อมูลที่เปลี่ยนแปลงได้ (mutable) เช่น เซตอีกตัว Dictionary หรือลิสต์
สมมติว่าเราต้องการสร้างเซตที่จัดเก็บลิสต์การบ้านที่นักเรียนส่งมาสำหรับชั้นเรียนภาษาอังกฤษ เราสามารถสร้างเซตนี้ได้ด้วยโค้ดต่อไปนี้:
assignments = {"Worksheet #4", "Worksheet #5", "Worksheet #7", "End of Topic Review #2"}
print(assignments)
โค้ดของเราคืนค่า:
{'Worksheet #5', 'Worksheet #4', 'Worksheet #7', 'End of Topic Review #2'}
ในโค้ดของเรา เรากำหนดเซตชื่อ assignments ซึ่งมี 4 ค่า จากนั้นเราพิมพ์เนื้อหาของเซต assignment ออกทางคอนโซล คุณเห็นได้ว่าค่าของเราถูกคืนในลำดับสุ่ม เพราะเซตไม่จัดเก็บรายการของมันในลำดับเฉพาะเจาะจง
การเปลี่ยนแปลง Set
เมื่อคุณสร้างเซตแล้ว คุณไม่สามารถเปลี่ยนค่าของรายการในเซตได้ อย่างไรก็ตาม คุณสามารถเพิ่มรายการเข้าไปและลบรายการออกจากเซตได้
เพิ่มรายการเข้าเซต
เพื่อเพิ่มองค์ประกอบเข้า Python set คุณสามารถใช้เมธอด add() สมมติว่านักเรียนเพิ่งส่ง Worksheet #8 และเราต้องการอัปเดตเซตของเราเพื่อติดตามการส่งการบ้านของนักเรียน เราสามารถทำได้ด้วยโค้ดนี้:
assignments = {"Worksheet #4", "Worksheet #5", "Worksheet #7", "End of Topic Review #2"}
assignments.add("Worksheet #8")
print(assignments)
โค้ดของเราคืนค่า:
{'Worksheet #8', 'Worksheet #4', 'Worksheet #5', 'End of Topic Review #2', 'Worksheet #7'}
ตามที่คุณเห็น Worksheet #8 ถูกเพิ่มเข้าเซตของเรา
เพิ่มเติม หากคุณต้องการเพิ่มหลายรายการเข้าเซต คุณสามารถใช้เมธอด update() เมธอด update() รับลิสต์ของรายการที่คุณต้องการเพิ่มเข้าเซตเป็นพารามิเตอร์ จากนั้นเพิ่มรายการเหล่านั้นเข้าเซต
สมมติว่านักเรียนส่งทั้ง Worksheet #8 และ #9 เราสามารถเปลี่ยนเซตของเราเพื่อสะท้อนการส่งการบ้านใหม่เหล่านี้ได้ด้วยโค้ดนี้:
assignments = {"Worksheet #4", "Worksheet #5", "Worksheet #7", "End of Topic Review #2"}
assignments.update(["Worksheet #8", "Worksheet #9"])
print(assignments)
โค้ดของเราคืนค่า:
{'Worksheet #9', 'End of Topic Review #2', 'Worksheet #8', 'Worksheet #7', 'Worksheet #4', 'Worksheet #5'}
ตอนนี้เซตของเรามีค่าใหม่ 2 ค่า: Worksheet #8 และ Worksheet #9
ลบองค์ประกอบจากเซต
เพื่อลบองค์ประกอบจากเซต คุณสามารถใช้ discard() หรือ remove()
ฟังก์ชัน discard() ลบรายการจากเซตและคืนค่าว่างหากรายการไม่มีอยู่ในเซต ฟังก์ชัน remove() จะพยายามลบรายการจากเซต และหากรายการนั้นไม่มีอยู่ ข้อผิดพลาดจะถูก raise
สมมติว่าเราต้องการลบ Worksheet #9 จากบันทึกการบ้านของนักเรียน เพราะพวกเขาถูกขอให้ทำซ้ำ เราสามารถทำได้ด้วยโค้ดนี้:
assignments = {'Worksheet #9', 'End of Topic Review #2', 'Worksheet #8', 'Worksheet #7', 'Worksheet #4', 'Worksheet #5'}
assignments.discard("Worksheet #9")
print(assignments)
โค้ดของเราคืนค่า:
{'End of Topic Review #2', 'Worksheet #5', 'Worksheet #4', 'Worksheet #8', 'Worksheet #7'}
คุณเห็นได้ว่าค่า Worksheet #9 ถูกลบออกจากเซตของเรา เราทำได้โดยใช้เมธอด discard()
ล้างเซต (Clear a Set)
เพื่อล้างเซต คุณสามารถใช้เมธอด clear() สมมติว่าเราต้องการล้างบันทึกการบ้านของนักเรียน เพราะสิ้นปีการศึกษาและเราไม่ต้องจัดเก็บ información อีกต่อไป เราสามารถทำได้ด้วยโค้ดนี้:
assignments = {'Worksheet #9', 'End of Topic Review #2', 'Worksheet #8', 'Worksheet #7', 'Worksheet #4', 'Worksheet #5'}
assignments.clear()
print(assignments)
โค้ดของเราคืนค่า: {} นี่สะท้อนเซตว่างของเรา
คืนค่าความยาวของเซต
เพื่อหาจำนวนรายการที่จัดเก็บในเซต คุณสามารถใช้เมธอด len()
สมมติว่าเราต้องการทราบว่านักเรียนส่งการบ้านกี่ชิ้น เราสามารถทำได้ด้วยโค้ดนี้:
assignments = {'Worksheet #9', 'End of Topic Review #2', 'Worksheet #8', 'Worksheet #7', 'Worksheet #4', 'Worksheet #5'}
print(len(assignments))
โค้ดของเราคืนค่า: 6 ในโค้ดของเรา เราประกาศเซตชื่อ assignments ก่อน จากนั้นเราใช้เมธอด len() เพื่อหาจำนวนรายการที่จัดเก็บในเซต assignments
Python Set Operations (การดำเนินการเซต)
หนึ่งในข้อได้เปรียบของการใช้เซตจัดเก็บข้อมูลคือ เซตรองรับการดำเนินการทางคณิตศาสตร์ของเซต มาเดินผ่านวิธีการทำงานของการดำเนินการเซตหลัก 3 อย่าง
การดำเนินการเซตเหล่านี้ ไม่เปลี่ยนแปลง เนื้อหาของเซต แทนที่จะเป็นเช่นนั้น พวกมันดำเนินการคำนวณบนเซตที่มีอยู่
Set Union (ยูเนียนเซต)
เมธอด union() ช่วยให้เราสร้างเซตขององค์ประกอบทั้งหมดจากสองเซต
สมมติว่าเรามีลิสต์การบ้านของนักเรียนสองลิสต์ที่เราต้องการรวมกัน ลิสต์หนึ่งมีข้อมูลการบ้านของนักเรียน และอีกลิสต์มีลิสต์การบ้านแบบเรียงความ (essay) ที่นักเรียนทำเสร็จแล้ว เราสามารถรวมลิสต์เหล่านี้ได้ด้วยโค้ดนี้:
assignments = {"Worksheet #4", "Worksheet #5", "Worksheet #7"}
essays = {"Essay #1", "Essay #2"}
homework = assignments.union(essays)
print(homework)
โค้ดของเราคืนค่า:
{'Worksheet #7', 'Essay #2', 'Worksheet #4', 'Essay #1', 'Worksheet #5'}
ในโค้ดของเรา เราใช้เมธอด union() เพื่อรวมเซตสองตัวของเราเข้าด้วยกัน เรากำหนดค่าของเซตที่รวมใหม่ให้ตัวแปร homework จากนั้นเราพิมพ์ค่าของตัวแปร homework
ทางเลือก เราสามารถใช้โค้ดต่อไปนี้:
assignments = {"Worksheet #4", "Worksheet #5", "Worksheet #7"}
essays = {"Essay #1", "Essay #2"}
print(assignments | essays)
ตัวดำเนินการ "|" ดำเนินการ union set operation โค้ดของเราคืนค่าเซตที่รวมแล้ว:
{'Essay #2', 'Worksheet #4', 'Worksheet #5', 'Essay #1', 'Worksheet #7'}
Set Intersection (อินเตอร์เซ็กชันเซต)
เมธอด intersection() ช่วยให้คุณสร้างลิสต์ขององค์ประกอบที่พบได้ทั่วไประหว่างสองเซต
สมมติว่าเรามีลิสต์เรียงความที่นักเรียนส่งมา และลิสต์เรียงความที่ได้รับมอบหมาย หากเราต้องการทราบว่านักเรียนยังไม่ส่งเรียงความไหน เราสามารถดำเนินการ intersection method ได้
นี่คือโค้ดที่เราจะใช้:
essays_handed_in = {"Essay #1", "Essay #2"}
essays_issued = {"Essay #1", "Essay #2", "Essay #3"}
due = essays_handed_in.intersection(essays_issued)
print(due)
โค้ดของเราคืนค่า:
{'Essay #1', 'Essay #2'}
ในตัวอย่างนี้ เราใช้เมธอด intersection() เพื่อหาองค์ประกอบทั้งหมดที่มีอยู่ในทั้งเซต essays_handed_in และ essays_issued เรากำหนดผลลัพธ์ของการดำเนินการ intersection ให้ตัวแปร due ซึ่งเราจึงพิมพ์ทางคอนโซล
เพิ่มเติม เราสามารถใช้ตัวดำเนินการ & เพื่อดำเนินการ set intersection operation ดังนั้น หากเราต้องการดำเนินการ intersection บนเซตสองตัวจากก่อนหน้านี้ เราสามารถใช้โค้ดนี้:
essays_handed_in = {"Essay #1", "Essay #2"}
essays_issued = {"Essay #1", "Essay #2", "Essay #3"}
print(essays_handed_in & essays_issued)
โค้ดของเราคืนค่า:
{'Essay #1', 'Essay #2'}
Set Difference (ดิฟเฟอเรนซ์เซต)
เมธอด difference() ช่วยให้คุณหาว่าองค์ประกอบไหนมีอยู่ในเซตหนึ่งแต่ไม่มีในอีกเซตหนึ่ง
สมมติว่าเราต้องการสร้างลิสต์ของเรียงความทั้งหมดที่นักเรียนส่งมาและยังไม่ได้รับการตรวจ เราสามารถทำได้ด้วยโค้ดนี้:
essays_handed_in = {"Essay #1", "Essay #2"}
essays_graded = {"Essay #1"}
final = essays_handed_in.difference(essays_graded)
print(final)
โค้ดของเราคืนค่า:
{"Essay #2"}
ในโค้ดนี้ เราใช้เมธอด difference() เพื่อหาความต่างระหว่างเซต essays_handed_in และ essays_graded ทางเลือก เราสามารถใช้ตัวดำเนินการ - ได้ เช่นนี้:
essays_handed_in = {"Essay #1", "Essay #2"}
essays_graded = {"Essay #1"}
print(essays_handed_in - essays_graded)
โค้ดของเราคืนค่า:
{"Essay #2"}
ผลลัพธ์เดียวกันถูกคืนค่าในโค้ดของเรา แต่แทนที่จะใช้เมธอด difference() ของเซต เราใช้ตัวดำเนินการ - ซึ่งดำเนินการตรวจสอบเพื่อหาความต่างระหว่างสองเซต
สรุป
โครงสร้างข้อมูล set ของ Python ช่วยให้คุณจัดเก็บคอลเลกชันของรายการที่ไม่มีลำดับ
แต่ละรายการในเซตต้องเป็นเอกลักษณ์ ดังนั้นไม่สามารถมีค่าซ้ำได้ และเนื้อหาของเซตไม่สามารถเปลี่ยนแปลงได้เมื่อถูกเพิ่มเข้าเซตแล้ว
บทช่วยสอนนี้อภิบายพร้อมอ้างอิงตัวอย่าง พื้นฐานของ Python sets และการดำเนินการหลักที่เซตเสนอ
เราเพียงแค่ขูดผิวของสิ่งที่คุณสามารถทำกับเซตได้ — ยังมีอีกมากมายให้คุณสำรวจ — แต่เราครอบคลุมทักษะหลักที่คุณต้องรู้เพื่อทำงานกับเซตอย่างมีประสิทธิภาพ ตอนนี้คุณพร้อมที่จะเริ่มใช้เมธอด Python set() อย่างมืออาชีพแล้ว!