Notes & software courses · Free to learn
Aph's Blog
On this page

วันที่ 7 — เซต (Sets)

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

เรียนรู้ Set ใน Python — collection ที่ไม่มีลำดับ ไม่มี index และไม่มีค่าซ้ำ

เซต (Sets)

Set คือ collection ของสมาชิก ลองนึกถึง Set ในวิชาคณิตศาสตร์ระดับประถมหรือมัธยม นิยามของ set ในคณิตศาสตร์สามารถนำมาใช้ใน Python ได้เช่นกัน Set คือ collection ของ distinct elements ที่ไม่มีลำดับและไม่มี index ใน Python set ใช้เก็บค่าที่ไม่ซ้ำกัน และสามารถหา union, intersection, difference, symmetric difference, subset, super set และ disjoint set ระหว่าง set ได้

การสร้าง Set

ใช้ฟังก์ชัน set() ในการสร้าง empty set วงเล็บปีกกา {} จะสร้าง dictionary ไม่ใช่ set

สร้าง empty set:

python
# syntax
st = set()

สร้าง set ที่มีค่าเริ่มต้น:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}

ตัวอย่าง:

python
# syntax
fruits = {'banana', 'orange', 'mango', 'lemon'}

ความยาวของ Set

ใช้ len() เพื่อหาความยาวของ set:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
len(st)
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
len(fruits)

การเข้าถึงสมาชิกใน Set

เราใช้ loop ในการเข้าถึงสมาชิก จะเรียนในหัวข้อ loop

การเช็คสมาชิก

ใช้ตัวดำเนินการ in เพื่อตรวจสอบว่าสมาชิกมีอยู่ใน set หรือไม่:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? True
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
print('mango' in fruits) # True

การเพิ่มสมาชิกเข้า Set

เมื่อสร้าง set แล้วเราไม่สามารถเปลี่ยนสมาชิกที่มีอยู่ได้ แต่สามารถเพิ่มสมาชิกใหม่ได้

เพิ่มสมาชิกหนึ่งตัวด้วย add():

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.add('item5')
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')

เพิ่มสมาชิกหลายตัวด้วย update() — รับ list เป็น argument:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)

การลบสมาชิกออกจาก Set

ใช้ remove() ลบสมาชิก ถ้าสมาชิกไม่มีอยู่ remove() จะ raise error ส่วน discard() จะไม่ raise error:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.remove('item2')

pop() ลบสมาชิกแบบ random และคืนค่าสมาชิกที่ถูกลบ:

python
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.pop()  # removes a random item from the set
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
removed_item = fruits.pop()

การล้างสมาชิกทั้งหมดใน Set

ใช้ clear() เพื่อลบสมาชิกทั้งหมดออกจาก set:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.clear()
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()

การลบ Set

ใช้ del เพื่อลบ set ทั้งก้อน:

python
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
del st
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
del fruits

การแปลง List เป็น Set

เราสามารถแปลง list เป็น set และ set เป็น list ได้ การแปลง list เป็น set จะลบค่าซ้ำออก เหลือแต่ค่าที่ unique:

python
# syntax
lst = ['item1', 'item2', 'item3', 'item4', 'item1']
st = set(lst)  # {'item2', 'item4', 'item1', 'item3'} - the order is random, because sets in general are unordered
python
fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}

การรวม Set (Joining)

ใช้ union() หรือ update() หรือสัญลักษณ์ | ในการรวม set:

Union — คืน set ใหม่:

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2) #st3 = st1 | st2
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
print(fruits.union(vegetables)) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}
# or using this : print(fruits | vegetables)

Update — เพิ่มสมาชิกของ set หนึ่งเข้าไปใน set ที่กำหนด:

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st1.update(st2) # st2 contents are added to st1
python
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
fruits.update(vegetables)
print(fruits) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}

การหา Intersection

Intersection คืนค่าสมาชิกที่มีอยู่ใน set ทั้งสอง หรือใช้สัญลักษณ์ &:

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}
# or using this : st1 & st2
python
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers  = {0, 2, 4, 6, 8, 10}
whole_numbers.intersection(even_numbers) # {0, 2, 4, 6, 8, 10}

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.intersection(dragon)     # {'o', 'n'}
# python & dragon

การเช็ค Subset และ Super Set

set หนึ่งอาจเป็น subset หรือ super set ของ set อื่น:

  • Subset: issubset()
  • Super set: issuperset()
python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1)   # True
st1.issuperset(st2) # True
python
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers  = {0, 2, 4, 6, 8, 10}
whole_numbers.issubset(even_numbers)   # False, because it is a super set
whole_numbers.issuperset(even_numbers) # True

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.issubset(dragon)     # False

การหา Difference ระหว่าง Set

คืนค่าความแตกต่างระหว่าง set สองตัว หรือใช้สัญลักษณ์ -:

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.difference(st1) # set() : st2 - st1
st1.difference(st2) # {'item1', 'item4'} => st1\st2  : st2 - st1
python
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers  = {0, 2, 4, 6, 8, 10}
whole_numbers.difference(even_numbers) # {1, 3, 5, 7, 9}

python = {'p', 'y', 't', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.difference(dragon)     # {'p', 'y', 't'}  - the result is unordered (characteristic of sets)
# python - dragon
dragon.difference(python)     # {'d', 'r', 'a', 'g'}
# dragon - python

การหา Symmetric Difference ระหว่าง Set

คืนค่า symmetric difference ระหว่าง set ซึ่งก็คือสมาชิกที่อยู่ในทั้งสอง set แต่ไม่ได้อยู่ในส่วน intersection ทางคณิตศาสตร์คือ (A\B) ∪ (B\A):

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
# it means (A\B)∪(B\A)
st2.symmetric_difference(st1) # {'item1', 'item4'} : st2 ^ st1
python
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
some_numbers  = {1, 2, 3, 4, 5}
whole_numbers.symmetric_difference(some_numbers) # {0, 6, 7, 8, 9, 10}

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.symmetric_difference(dragon)  # {'r', 't', 'p', 'y', 'g', 'a', 'd', 'h'}
# python ^ dragon

Joining Sets

ถ้า set สองตัวไม่มีสมาชิกร่วมกันเลยเรียกว่า disjoint sets ใช้ isdisjoint() ตรวจสอบ:

python
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # False
python
even_numbers = {0, 2, 4 ,6, 8}
odd_numbers  = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # True, because no common item

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.isdisjoint(dragon)  # False, there are common items {'o', 'n'}

💻 แบบฝึกหัด — วันที่ 7

python
# sets
it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'}
A = {19, 22, 24, 20, 25, 26}
B = {19, 22, 20, 25, 26, 24, 28, 27}
age = [22, 19, 24, 25, 26, 24, 25, 24]

ระดับ 1

  1. Find the length of the set it_companies
  2. Add 'Twitter' to it_companies
  3. Insert multiple IT companies at once to the set it_companies
  4. Remove one of the companies from the set it_companies
  5. What is the difference between remove and discard

ระดับ 2

  1. Join A and B
  2. Find A intersection B
  3. Is A subset of B
  4. Are A and B disjoint sets
  5. Join A with B and B with A
  6. What is the symmetric difference between A and B
  7. Delete the sets completely

ระดับ 3

  1. Convert the ages to a set and compare the length of the list and the set, which one is bigger?
  2. Explain the difference between the following data types: string, list, tuple and set
  3. I am a teacher and I love to inspire and teach people. How many unique words have been used in the sentence? Use the split methods and set to get the unique words.