On this page
- เซต (Sets)
- การสร้าง Set
- ความยาวของ Set
- การเข้าถึงสมาชิกใน Set
- การเช็คสมาชิก
- การเพิ่มสมาชิกเข้า Set
- การลบสมาชิกออกจาก Set
- การล้างสมาชิกทั้งหมดใน Set
- การลบ Set
- การแปลง List เป็น Set
- การรวม Set (Joining)
- การหา Intersection
- การเช็ค Subset และ Super Set
- การหา Difference ระหว่าง Set
- การหา Symmetric Difference ระหว่าง Set
- Joining Sets
- 💻 แบบฝึกหัด — วันที่ 7
- ระดับ 1
- ระดับ 2
- ระดับ 3
วันที่ 7 — เซต (Sets)
เรียนรู้ 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:
# syntax
st = set()สร้าง set ที่มีค่าเริ่มต้น:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}ตัวอย่าง:
# syntax
fruits = {'banana', 'orange', 'mango', 'lemon'}ความยาวของ Set
ใช้ len() เพื่อหาความยาวของ set:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
len(st)fruits = {'banana', 'orange', 'mango', 'lemon'}
len(fruits)การเข้าถึงสมาชิกใน Set
เราใช้ loop ในการเข้าถึงสมาชิก จะเรียนในหัวข้อ loop
การเช็คสมาชิก
ใช้ตัวดำเนินการ in เพื่อตรวจสอบว่าสมาชิกมีอยู่ใน set หรือไม่:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? Truefruits = {'banana', 'orange', 'mango', 'lemon'}
print('mango' in fruits) # Trueการเพิ่มสมาชิกเข้า Set
เมื่อสร้าง set แล้วเราไม่สามารถเปลี่ยนสมาชิกที่มีอยู่ได้ แต่สามารถเพิ่มสมาชิกใหม่ได้
เพิ่มสมาชิกหนึ่งตัวด้วย add():
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.add('item5')fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')เพิ่มสมาชิกหลายตัวด้วย update() — รับ list เป็น argument:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)การลบสมาชิกออกจาก Set
ใช้ remove() ลบสมาชิก ถ้าสมาชิกไม่มีอยู่ remove() จะ raise error ส่วน discard() จะไม่ raise error:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.remove('item2')pop() ลบสมาชิกแบบ random และคืนค่าสมาชิกที่ถูกลบ:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.pop() # removes a random item from the setfruits = {'banana', 'orange', 'mango', 'lemon'}
removed_item = fruits.pop()การล้างสมาชิกทั้งหมดใน Set
ใช้ clear() เพื่อลบสมาชิกทั้งหมดออกจาก set:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.clear()fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()การลบ Set
ใช้ del เพื่อลบ set ทั้งก้อน:
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
del stfruits = {'banana', 'orange', 'mango', 'lemon'}
del fruitsการแปลง List เป็น Set
เราสามารถแปลง list เป็น set และ set เป็น list ได้ การแปลง list เป็น set จะลบค่าซ้ำออก เหลือแต่ค่าที่ unique:
# syntax
lst = ['item1', 'item2', 'item3', 'item4', 'item1']
st = set(lst) # {'item2', 'item4', 'item1', 'item3'} - the order is random, because sets in general are unorderedfruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}การรวม Set (Joining)
ใช้ union() หรือ update() หรือสัญลักษณ์ | ในการรวม set:
Union — คืน set ใหม่:
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2) #st3 = st1 | st2fruits = {'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 ที่กำหนด:
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st1.update(st2) # st2 contents are added to st1fruits = {'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 ทั้งสอง หรือใช้สัญลักษณ์ &:
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}
# or using this : st1 & st2whole_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()
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1) # True
st1.issuperset(st2) # Truewhole_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 สองตัว หรือใช้สัญลักษณ์ -:
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.difference(st1) # set() : st2 - st1
st1.difference(st2) # {'item1', 'item4'} => st1\st2 : st2 - st1whole_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):
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
# it means (A\B)∪(B\A)
st2.symmetric_difference(st1) # {'item1', 'item4'} : st2 ^ st1whole_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 ^ dragonJoining Sets
ถ้า set สองตัวไม่มีสมาชิกร่วมกันเลยเรียกว่า disjoint sets ใช้ isdisjoint() ตรวจสอบ:
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # Falseeven_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
# 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
- Find the length of the set it_companies
- Add 'Twitter' to it_companies
- Insert multiple IT companies at once to the set it_companies
- Remove one of the companies from the set it_companies
- What is the difference between remove and discard
ระดับ 2
- Join A and B
- Find A intersection B
- Is A subset of B
- Are A and B disjoint sets
- Join A with B and B with A
- What is the symmetric difference between A and B
- Delete the sets completely
ระดับ 3
- Convert the ages to a set and compare the length of the list and the set, which one is bigger?
- Explain the difference between the following data types: string, list, tuple and set
- 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.