Set ในภาษา Python

14 December 2020

Set (เซ็ต) เป็นออบเจ็คที่ใช้สำหรับเก็บข้อมูลที่ไม่ซ้ำกัน ในการเขียนโปรแกรมเราสามารถใช้ Set สำหรับหาค่าที่ไม่ซ้ำกันภายในลิสต์ ตรวจสอบข้อมูลที่มีอยู่แล้ว หรือการดำเนินการทางคณิตศาสตร์เกี่ยวกับ Set ได้ เช่น Intersection, Union, Difference และ Symmetric difference และนี่เป็นเนื้อหาที่คุณจะได้เรียนในบทนี้

  • การประกาศและใช้งาน Set
  • การเพิ่มและลบข้อมูลออกจาก Set
  • การตรวจสอบค่าใน Set
  • การดำเนินการเกี่ยวกับ Set
  • การเปรียบเทียบ Set
  • การวนรอบข้อมูลใน Set
  • frozenset

การประกาศและใช้งาน Set

Set เป็นออบเจ็คจากคลาส set เราสามารถใช้มันเพื่อสร้างออบเจ็คของ Set สำหรับเก็บข้อมูลที่ไม่ซ้ำกัน ในภาษา Python เราสามารถสร้างเซ็ตได้หลายวิธี นี่เป็นตัวอย่างการประกาศ Set ในภาษา Python โดยวิธีต่างๆ

create_set.py
mySet1 = {"value1", "value2", "value3"}
mySet2 = set(["value1", "value2", "value3"])
mySet3 = set("value1")
mySet4 = set()

print(mySet1)
print(mySet2)
print(mySet3)
print(mySet4)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

{'value3', 'value1', 'value2'}
{'value3', 'value1', 'value2'}
{'1', 'a', 'v', 'u', 'l', 'e'}
set()

ในตัวอย่าง เป็นการประกาศ Set ด้วยวิธีต่างๆ ในภาษา Python ซึ่งแต่ละวิธีนั้นมีรูปแบบการใช้งานที่แตกต่างกันแต่มันให้ผลลัพธ์ที่เหมือนกัน นั่นคือเราจะได้ออบเจ็คของ Set เพื่อนำมาใช้งานในโปรแกรมของเรา

mySet1 = {"value1", "value2", "value3"}

รูปแบบแรกในการประกาศ Set นั้นคือการใช้ Set literal สำหรับกำหนดค่าของ Set โดยค่าทั้งหมดจะอยู่ระหว่างวงเล็บ {...} และเราสามารถคั่นแต่ละสมาชิกภายใน Set ได้ด้วยเครื่องหมายคอมมา (,) นี่เป็นวิธีที่ง่ายและใช้บ่อยที่สุด

mySet2 = set(["value1", "value2", "value3"])

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

mySet3 = set("value1")

ในการประกาศ Set ด้วยคลาส เมื่อพารามิเตอร์เป็น String แต่ละตัวอักษรใน String จะถูกเก็บเป็นค่าของ Set ถ้าหากภายใน String มีตัวอักษรที่ซ้ำกัน มีเพียงค่าเดียวเท่านั้นที่จะถูกเก็บใน Set

mySet4 = set()

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

เหมือนกับออบเจ็คประเภทอื่นๆ ในภาษา Python เราสามารถแสดงค่าของ Set ออกทางหน้าจอด้วยฟังก์ชัน print() ได้โดยค่าที่แสดงออกมาจะอยู่ในรูปแบบของ Set literal และมันมีประโยชน์ในการตรวจสอบค่าภายใน Set ในระหว่างที่เราเขียนโปรแกรม

หมายเหตุ: Set ไม่ได้เก็บข้อมูลในรูปแบบของลำดับ ลำดับที่ได้จากการแสดงผลหรือการวนรอบค่าจะไม่เหมือนกับตอนที่เราเพิ่มเข้าไปยัง Set ดังนั้นคุณไม่ควรยึดติดกับลำดับของข้อมูลใน Set ในการเขียนโปรแกรม

Set นั้นเป็นออบเจ็คที่ใช้สำหรับเก็บค่าที่ไม่ซ้ำกันเท่านั้น ถ้าหากเรากำหนดค่าที่ซ้ำกันให้กับ Set ในตอนประกาศออบเจ็ค ค่านั้นจะถูกเก็บใน Set เพียงครั้งเดียวเท่านั้น นี่เป็นตัวอย่าง

unique_set.py
numbers = {1, 2, 2, 3, 3, 4, 5}
colors = set(["red", "green", "blue", "blue", "yellow"])
print(numbers)
print(colors)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

{1, 2, 3, 4, 5}
{'yellow', 'green', 'blue', 'red'}

ในตัวอย่างนี้ เป็นการประกาศออบเจ็ค Set สำหรับเก็บตัวเลขและ String ซึ่งเป็นชื่อของสี สำหรับตัวเลขเรากำหนดค่าที่ซ้ำกันให้กับ Set เป็น 2 และ 3 ดังนั้นสองตัวเลขนี้จะถูกเก็บเพียงครั้งเดียวภายใน Set และเช่นกันสำหรับชื่อของสีที่มีการกำหนด "blue" สองครั้ง

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

set_length.py
names = {"metin", "matteo", "chris", "robin"}
print("Size of names: %d" % len(names))

numbers = set([1, 2, 3])
print("Size of numbers: %d" % len(numbers))
numbers.add(4)
numbers.add(5)
print("Size of numbers: %d" % len(numbers))

empty = set()
print("Size of empty: %d" % len(empty))

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Size of names: 4
Size of numbers: 3
Size of numbers: 5
Size of empty: 0

ในตัวอย่างนี้เป็นการใช้งานฟังก์ชัน len() สำหรับนับจำนวนสมาชิกของทั้งสามเซ็ตจากนั้นแสดงค่าที่นับได้ออกทางหน้าจอ

คำสั่งแรกเป็นการใช้ฟังก์ชันเพื่อนับข้อมูลในเซ็ต names ซึ่งสมาชิกจำนวน 4 ตัว จากนั้นนับข้อมูลจาก Set ของตัวเลขที่ในตอนแรกมีสมาชิก 3 ตัว และเราเพิ่มอีกสองตัวเลขเข้ามายัง Set ทำให้มันมีสมาชิกเป็น 5 ตัว สุดท้ายนับสมาชิกของเซ็ตว่าง empty ซึ่งเซ็ตว่างจะมีจำนวนของสมาชิกเป็น 0 เสมอ

การเพิ่มและลบข้อมูลออกจาก Set

หลังจากที่ได้เรียนรู้การประกาศ Set ไปแล้ว ต่อไปมาดูการเพิ่มและลบข้อมูลออกจาก Set อย่างที่เราได้บอกไปก่อนหน้า หลังจากที่ Set ถูกประกาศแล้ว เราสามารถเพิ่มข้อมูลเข้าไปยัง Set ได้ และยังสามารถลบข้อมูลออกจาก Set โดยการใช้เมธอดต่อไปนี้

  • เมธอด add(value): เพิ่มข้อมูลเข้าไปยัง Set ถ้าค่าดังกล่าวมีในเซ็ตอยู่แล้วเมธอดนี้ไม่ทำอะไร
  • เมธอด remove(value): ลบข้อมูลออกจาก Set ในการใช้เมธอดนี้ ถ้าค่าที่ต้องการลบไม่มีอยู่ใน Set จะส่งข้อผิดพลาด KeyError ขึ้น
  • เมธอด discard(value): สำหรับลบข้อมูลออกจาก Set ถ้าหากค่าดังกล่าวมีอยู่
  • เมธอด clear(): ลบข้อมูลทั้งหมดออกจาก Set นั่นจะทำให้เซ็ตว่างหลังจากเรียกเมธอดนี้
  • เมธอด pop(): นำข้อมูลออกจาก Set และส่งค่ากลับมา ค่าที่ส่งกลับจากเมธอดนี้ไม่สามารถคาดเดาได้ และถ้าเซ็ตเป็นเซ็ตว่าง เมธอดทำให้เกิดข้อผิดพลาด KeyError ขึ้น

นี่เป็นตัวอย่างการเพิ่มข้อมูลและลบข้อมูลออกจาก Set หลังจากที่ออบเจ็คได้ถูกประกาศไปแล้วในภาษา Python

set_example1.py
names = set()

# Add three values to set
names.add("Metin")
names.add("Robin")
names.add("Chris")
names.add("Chris")
print(names)

# Remove Robin from set
names.remove("Robin")
print(names)

# Remove all values
names.clear()
print(names)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

{'Chris', 'Robin', 'Metin'}
{'Chris', 'Metin'}
set()

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

names.add("Metin")
names.add("Robin")
names.add("Chris")
names.add("Chris")

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

names.remove("Robin")

เมธอด remove() ใช้สำหรับลบข้อมูลออกจาก Set ในการใช้เมธอดนี้คุณควรระวัง เพราะถ้าหากข้อมูลที่ต้องการลบไม่มีอยู่ภายใน Set จะทำให้เกิดข้อผิดพลาด KeyError นี่อาจช่วยให้เราแน่ใจได้ว่าเราจะลบข้อมูลที่มีอยู่ภายใน Set จริงๆ เท่านั้น

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

names.clear()

สุดท้ายเมธอด clear() ใช้สำหรับลบข้อมูลทั้งหมดออกจาก Set นี่จะทำให้เซ็ตเป็นเซ็ตว่าง และเมื่อเรานับจำนวนสมาชิกของเซ็ตด้วยฟังก์ชัน len() มันจะส่งค่ากลับเป็น 0

การตรวจสอบค่าใน Set

เมื่อต้องทำงานกับ Set เราอาจต้องการตรวจสอบว่ามีค่าที่ต้องการค้นหาอยู่ภายใน Set หรือไม่ ในภาษา Python เราสามารถใช้ตัวดำเนินการ in และ not in สำหรับตรวจสอบค่าภายใน Set ได้ นี่เป็นตัวอย่าง

set_find.py
languages = {"PHP", "Python", "Ruby", "Java"}

print("Python" in languages)
print("GO" in languages)

numbers = {10, 20, 30, 40, 50}

print(100 not in numbers)
print(50 not in numbers)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

True
False
True
False

ในตัวอย่างนี้ เป็นการตรวจสอบว่าค่าที่ต้องการค้นหามีอยู่ภายใน Set หรือไม่โดยการใช้ตัวดำเนินการ in และ not in สำหรับการตรวจสอบ ตัวดำเนินการส่งค่ากลับเป็น Boolean ว่าเงื่อนไขเป็นจริงหรือไม่

print("Python" in languages)
print("GO" in languages)

ตัวดำเนินการ in ส่งค่ากลับเป็น True ถ้าหากค่าดังกล่าวมีอยู่ภายใน Set ไม่เช่นนั้นมันส่งค่ากลับเป็น False

print(100 not in languages)
print(50 not in languages)

ในทางกลับกัน ตัวดำเนินการ not in นั้นทำงานตรงกันข้ามกับตัวดำเนินการ in มันส่งค่ากลับเป็น True ถ้าหากค่าดังกล่าวไม่มีอยู่ภายใน Set ไม่เช่นนั้นมันส่งค่ากลับเป็น True

การดำเนินการเกี่ยวกับ Set

ในทางคณิตศาสตร์ เซ็ตมีการดำเนินการพื้นฐานอยู่ 4 อย่างคือ Intersection, Union, Difference และ Symmetric difference ซึ่งในภาษา Python นั้นมีฟังก์ชันที่เราสามารถใช้งานสำหรับการดำเนินการพื้นฐานเหล่านี้ได้อย่างง่ายดาย นี่เป็นตัวอย่างการใช้งาน

set_operations.py
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}

print(a.union(b))
print(a.intersection(b))
print(a.difference(b))
print(a.symmetric_difference(b))

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
{1, 2, 6, 7}

ในตัวอย่างนี้ แสดงการดำเนินการพื้นฐานเกี่ยวกับ Set ได้แก่ การ Intersection, Union, Difference และ Symmetric difference กำหนดให้เรามีเซ็ต a และ b สำหรับเก็บค่าของตัวเลข จากนั้นเรียกใช้เมธอดบนออบเจ็ค a สำหรับการดำเนินการกับเซ็ตร่วมกับ b

print(a.union(b))

เมธอด union() ใช้สำหรับหายูเนียนของเซ็ต เมธอดนี้ส่งค่ากลับเป็นเซ็ตใหม่ที่ประกอบไปด้วยสมาชิกจากเซ็ต a และ b โดยลบค่าที่ซ้ำกันให้เหลือเพียงค่าเดียว

print(a.intersection(b))

เมธอด intersection() ใช้สำหรับหาอินเตอร์เซกชันของเซ็ต มันส่งค่ากลับเป็นเซ็ตใหม่ที่ประกอบไปด้วยสมาชิกที่มีอยู่ทั้งในเซ็ต a และ b

print(a.difference(b))

เมธอด difference() ใช้สำหรับหาผลต่างของเซ็ต มันส่งค่ากลับเป็นเซ็ตใหม่ที่มีสมาชิกอยู่ในเซ็ต a และต้องไม่อยู่ในเซ็ต b

print(a.symmetric_difference(b))

สุดท้ายเมธอด symmetric_difference() นั้นใช้สำหรับหาความแตกต่างแบบสมมาตรของเซ็ต มันส่งค่ากลับเป็นสมาชิกจากเซ็ต a และ b แต่ไม่เป็นสมาชิกที่ไม่มีอยู่ภายในเซ็ตทั้งสอง

การเปรียบเทียบ Set

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

set_relationship.py
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}

print("Is a subset of b?", a.issubset(b))
print("Is b super set of a?", b.issuperset(a))

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Is a subset of b? True
Is b super set of a? True

ในตัวอย่าง เป็นการตรวจว่าเซ็ตเป็นสับเซ็ตและเพาเวอร์เซตของกันและกันหรือไม่โดยการใช้เมธอด issubset() และเมธอด issuperset() ตามลำดับ

print("Is a subset of b?", a.issubset(b))

ในคำสั่งนี้เป็นการใช้เมธอด issubset() เพื่อตรวจสอบว่าเซ็ต a เป็นสับเซ็ตของเซ็ต b หรือไม่ โดยที่เซ็ต a จะเป็นสับเซ็ตของเซ็ต b ก็ต่อเมื่อสมาชิกทั้งหมดในเซ็ต a มีอยู่ใน b ดังนั้นผลลัพธ์ที่ได้จากคำสั่งนี้เป็นจริง

print("Is b super set of a?", b.issuperset(a))

คำสั่งต่อมาเป็นการใช้เมธอด issuperset() เพื่อตรวจสอบว่าเซ็ต b เป็นเพาเวอร์เซตของเซ็ต a หรือไม่ โดยที่เซ็ต b จะเป็นเพาเวอร์เซตของเซ็ต a ก็ต่อเมื่อสมาชิกทั้งหมดในเซ็ต a มีอยู่ใน b ดังนั้นผลลัพธ์ที่ได้จากคำสั่งนี่เป็นจริงเช่นกัน

จากตัวอย่างสามารถสรุปได้ว่าถ้าหากเซ็ต a เป็นสับเซ็ตของเซ็ต b นั่นจะทำให้เซ็ต b เป็นเพาเวอร์เซตของเซ็ต a เสมอ

การเปรียบเทียบอีกอย่างหนึ่งของเซ็ตก็คือการเปรียบความเท่ากัน และเปรียบเทียบความแตกต่างกันอย่างสิ้นเชิง นี่เป็นตัวอย่าง

set_comparison.py
a = {1, 2, 3}
b = {1, 2, 3}
c = {4, 5, 6}

print("a equal b?", a == b)
print("a equal b?", a == c)

print("a disjoint b?", a.isdisjoint(b))
print("a disjoint b?", a.isdisjoint(c))

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

a equal b? True
a equal b? False
a disjoint b? False
a disjoint b? True

ในตัวอย่างนี้ เป็นการเปรียบเทียบความเท่ากันและความแตกต่างกันของเซ็ต โดยการใช้ตัวดำเนินการ == และเมธอด isdisjoint() ตามลำดับ

print("a equal b?", a == b)
print("a equal b?", a == c)

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

print("a disjoint b?", a.isdisjoint(b))
print("a disjoint b?", a.isdisjoint(c))

เมธอด isdisjoint() ใช่สำหรับตรวจสอบว่าเซ็ตทั้งสองมีค่าที่แตกต่างกันทั้งหมดหรือไม่ เมธอดนี้ส่งค่ากลับเป็นจริง ถ้าหากในเซ็ตทั้งสองไม่มีค่าที่เหมือนกันเลย กล่าวคือเมื่อเราทำการ Intersect เซ็ตสองเซ็ตแล้วได้ผลลัพธ์เป็นเซ็ตว่าง แล้วการใช้งานเมธอด isdisjoint() กับเซ็ตทั้งสองจะได้ผลลัพธ์เป็นจริง

การวนรอบข้อมูลใน Set

ในภาษา Python เราสามารถวนรอบข้อมูลภายใน Set ได้หลายวิธี ในตัวอย่างนี้เราจะแสดงวิธีการวนรอบข้อมูลภายในเซ็ตแบบง่ายๆ คือการใช้คำสั่ง for loop นี่เป็นตัวอย่าง

set_iteration.py
days = {"Mon", "Tue", "Wed", "Thu", "Fri"}

for d in days:
    print(d)

name = set("marcuscode")

for ch in name:
    print(ch)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Wed
Thu
Mon
Tue
Fri
o
s
a
r
c
e
m
u
d

ในตัวอย่างนี้ เป็นการใช้คำสั่ง for loop เพื่อวนอ่านค่าภายใน Set และแสดงผลค่าที่วนได้ออกทางหน้าจอ ออบเจ็คเซ็ต days เก็บชื่อย่อของวันในสัปดาห์ และออบเจ็ค name เป็นเซ็ตที่เก็บตัวอักษรของข้อความ "marcuscode"

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

อย่างไรก็ตาม เราสามารถรวบรวมข้อมูลจาก Set และนำมาจัดเรียงในลำดับที่ต้องการได้ ในตัวอย่างนี้ เป็นการวนค่าใน Set มาเก็บในลิสต์จากนั้นเรียงค่าจากน้อยไปมาก

set_sorting.py
numbers = {10, 20, 30, 40, 50}

list = []
for n in numbers:
    print(n)
    list.append(n)

# Retived value from set
print(list)

# Sort by our preference
list.sort()
print(list)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

40
10
50
20
30
[40, 10, 50, 20, 30]
[10, 20, 30, 40, 50]

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

list.sort()
print(list)

อย่างไรก็ตาม หลังจากที่เราได้ค่าทั้งหมดมาเก็บไว้ในลิสต์แล้ว เราสามารถทำอะไรกับมันก็ได้ตามต้องการ ในกรณีนี้เราใช้เมธอด sort() เพื่อเรียงตัวเลขที่ได้มาภายในลิสต์จากน้อยไปมาก

frozenset

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

เราสามารถสร้าง Set ประเภทนี้ได้โดยใช้คลาสคอนสตรัคเตอร์ frozenset นี่เป็นตัวอย่าง

frozenset.py
names = frozenset({"Metin", "Matteo", "Chris", "Robin"})
numbers = frozenset([10, 20, 30, 40, 50])

print("Size of name:", len(names))
print("Is 10 in set?", 10 in numbers)

sum = 0
for n in numbers:
    sum += n

print("Sum:", sum)

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Size of name: 4
Is 10 in set? True
Sum: 150

ในตัวอย่าง เป็นการใช้งาน frozenset สำหรับสร้าง Set ที่สามารถอ่านค่าได้เพียงอย่างเดียวหลังจากที่ออบเจ็คได้ถูกสร้างแล้ว

names = frozenset({"Metin", "Matteo", "Chris", "Robin"})
numbers = frozenset([10, 20, 30, 40, 50])

ในการสร้าง frozenset เราจะต้องกำหนดค่าให้กับเซ็ตผ่านคลาสคอนสตรัคเตอร์ในตอนที่สร้างออบเจ็คเท่านั้น ออบเจ็คที่ส่งเป็นพารามิเตอร์สามารถเป็นเซ็ตปกติ หรือลิสต์ หรือ Tuple ก็ได้ หลังจากการสร้างออบเจ็คเสร็จสิ้น เราจะไม่สามารถเพิ่มและลบข้อมูลออกจากเซ็ตได้

print("Size of name:", len(names))
print("Is 10 in set?", 10 in numbers)

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

sum = 0
for n in numbers:
    sum += n

print("Sum:", sum)

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

frozenset นั้นมีประโยชน์เมื่อเราต้องการสร้าง Set ที่ต้องการให้สามารถอ่านค่าได้เพียงอย่างเดียว และมันช่วยป้องกันในกรณีที่มีการแก้ไขค่าในเซ็ตโดยไม่ได้ตั้งใจ

ในบทนี้ คุณได้เรียนรู้การใช้งาน Set ในภาษา Python เราได้พูดถึงการใช้งานพื้นฐานเกี่ยวกับเซ็ต และการดำเนินการต่างๆ ที่จำเป็นเมื่อต้องทำงานกับเซ็ต และการประยุกต์ใช้งาน Set ในการเขียนโปรแกรม

บทความนี้เป็นประโยชน์หรือไม่?Yes·No