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

Python Sets: คู่มือการใช้งาน Set

บ่อยครั้งที่เมื่อคุณทำงานกับข้อมูล คุณจะต้องการจัดเก็บลิสต์ข้อมูลที่ไม่สามารถมีค่าซ้ำได้ และค่าที่ไม่สามารถเปลี่ยนแปลงได้ ตัวอย่างเช่น หากคุณกำลังทำลิสต์รหัสการซื้อที่ร้านขายของชำ คุณจะต้องการให้แต่ละ 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() อย่างมืออาชีพแล้ว!