Author: Asabeneh Yetayeh
Second Edition: July, 2021
- ๐ Day 7
- Sets
- ์ธํธ ๋ง๋ค๊ธฐ
- ์ธํธ์ ๊ธธ์ด ๊ตฌํ๊ธฐ
- ์ธํธ์ ํญ๋ชฉ์ ์ก์ธ์ค
- ํญ๋ชฉ ํ์ธ
- ์ธํธ์ ํญ๋ชฉ ์ถ๊ฐ
- ์ธํธ์์ ํญ๋ชฉ ์ ๊ฑฐ
- ์ธํธ์ ํญ๋ชฉ ์ง์ฐ๊ธฐ
- ์ธํธ ์ญ์
- ๋ชฉ๋ก์ ์งํฉ์ผ๋ก ๋ณํ
- ์งํฉ ๊ฒฐํฉ
- ๊ต์ฐจ ํญ๋ชฉ ์ฐพ๊ธฐ
- ํ์ ์งํฉ ๋ฐ ์ํผ ์งํฉ ํ์ธ
- ๋ ์ธํธ ๊ฐ์ ์ฐจ์ด ํ์ธ
- ๋ ์งํฉ ๊ฐ์ ๋์นญ์ ์ฐจ์ด ์ฐพ๊ธฐ
- ์งํฉ ๊ฒฐํฉ
- ๐ป Exercises: Day 7
- Sets
๐ Day 7
Sets
์ธํธ๋ ํญ๋ชฉ์ ๋ชจ์์ ๋๋ค. ์ด๋ฑํ๊ต ๋๋ ๊ณ ๋ฑํ๊ต ์ํ ์์ ์ผ๋ก ๋์๊ฐ๊ฒ ์ต๋๋ค. ์งํฉ์ ์ํ ์ ์๋ Python์์๋ ์ ์ฉ๋ ์ ์์ต๋๋ค. ์งํฉ์ ์์๊ฐ ์ง์ ๋์ง ์๊ณ ์ธ๋ฑ์ฑ๋์ง ์์ ๊ฐ๋ณ ์์์ ๋ชจ์์ ๋๋ค. Python์์ ์งํฉ์ ๊ณ ์ ํ ํญ๋ชฉ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์งํฉ ๊ฐ์ ํฉ์งํฉ , ๊ต์ฐจ , ์ฐจ์ด , ๋์นญ์ ์ฐจ์ด , ํ์ ์งํฉ , ์์ ์งํฉ ๋ฐ ๋ถ๋ฆฌ ์งํฉ ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ธํธ ๋ง๋ค๊ธฐ
์ค๊ดํธ {}๋ฅผ ์ฌ์ฉํ์ฌ ์ธํธ ๋๋ set() ๋ด์ฅ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
- ๋น ์ธํธ ๋ง๋ค๊ธฐ
- ์ด๊ธฐ ํญ๋ชฉ์ผ๋ก ์ธํธ ๋ง๋ค๊ธฐ
์์:
์ธํธ์ ๊ธธ์ด ๊ตฌํ๊ธฐ
len() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์งํฉ์ ๊ธธ์ด๋ฅผ ์ฐพ์ต๋๋ค.
์์:
์ธํธ์ ํญ๋ชฉ์ ์ก์ธ์ค
๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ํญ๋ชฉ์ ์ก์ธ์คํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฃจํ ์น์ ์์ ์ด๊ฒ์ ๋ณผ ๊ฒ์ ๋๋ค
ํญ๋ชฉ ํ์ธ
๋ชฉ๋ก์ ํญ๋ชฉ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ฉค๋ฒ์ญ ์ฐ์ฐ์ ์์ ์ฌ์ฉํฉ๋๋ค.
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? True
์์:
์ธํธ์ ํญ๋ชฉ ์ถ๊ฐ
์ธํธ๊ฐ ์์ฑ๋๋ฉด ํญ๋ชฉ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ํญ๋ชฉ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
- add() ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ํญ๋ชฉ ์ถ๊ฐ
์์:
- update() ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํญ๋ชฉ ์ถ๊ฐ update() ๋ฅผ ์ฌ์ฉํ๋ฉด ์ธํธ์ ์ฌ๋ฌ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. update() ๋ ๋ชฉ๋ก ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)
์ธํธ์์ ํญ๋ชฉ ์ ๊ฑฐ
remove() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์งํฉ์์ ํญ๋ชฉ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ํญ๋ชฉ์ ์ฐพ์ ์ ์์ผ๋ฉด remove() ๋ฉ์๋๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ฏ๋ก ํด๋น ํญ๋ชฉ์ด ์ฃผ์ด์ง ์งํฉ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋, discard() ๋ฉ์๋๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค.
pop() ๋ฉ์๋๋ ๋ชฉ๋ก์์ ์์์ ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ์ ๊ฑฐ๋ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค.
์์:
์ ๊ฑฐ๋ ํญ๋ชฉ์ ๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ.
์ธํธ์ ํญ๋ชฉ ์ง์ฐ๊ธฐ
์ธํธ๋ฅผ ์ง์ฐ๊ฑฐ๋ ๋น์ฐ๋ ค๋ฉด clear ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
์ธํธ ์ญ์
์ธํธ ์์ฒด๋ฅผ ์ญ์ ํ๋ ค๋ฉด del ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
๋ชฉ๋ก์ ์งํฉ์ผ๋ก ๋ณํ
๋ฆฌ์คํธ๋ฅผ ์ธํธ๋ก, ์ธํธ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๋ชฉ๋ก์ ์ธํธ๋ก ๋ณํํ๋ฉด ์ค๋ณต ํญ๋ชฉ์ด ์ ๊ฑฐ๋๊ณ ๊ณ ์ ํ ํญ๋ชฉ๋ง ์์ฝ๋ฉ๋๋ค.
# syntax
lst = ['item1', 'item2', 'item3', 'item4', 'item1']
st = set(lst) # {'item2', 'item4', 'item1', 'item3'} - the order is random, because sets in general are unordered
์์:
fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}
์งํฉ ๊ฒฐํฉ
union() ๋๋ update() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์งํฉ์ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
- Union ์ด ๋ฉ์๋๋ ์ ์งํฉ์ ๋ฐํํฉ๋๋ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2)
์์:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
print(fruits.union(vegetables)) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}
- ์ ๋ฐ์ดํธ ์ด ๋ฉ์๋๋ ์ฃผ์ด์ง ์งํฉ์ ์งํฉ์ ์ฝ์ ํฉ๋๋ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st1.update(st2) # st2 contents are added to st1
์์:
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์ ๋ ์งํฉ ๋ชจ๋์ ์๋ ํญ๋ชฉ ์งํฉ์ ๋ฐํํฉ๋๋ค. ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}
์์:
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'}
ํ์ ์งํฉ ๋ฐ ์ํผ ์งํฉ ํ์ธ
์งํฉ์ ๋ค๋ฅธ ์งํฉ์ ํ์ ์งํฉ ๋๋ ์์ ์งํฉ์ผ ์ ์์ต๋๋ค.
- Subset: issubset()
- Super set: issuperset
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1) # True
st1.issuperset(st2) # True
์์:
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
๋ ์ธํธ ๊ฐ์ ์ฐจ์ด ํ์ธ
๋ ์งํฉ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.difference(st1) # set()
st1.difference(st2) # {'item1', 'item4'} => st1\st2
์์:
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)
dragon.difference(python) # {'d', 'r', 'a', 'g'}
๋ ์งํฉ ๊ฐ์ ๋์นญ์ ์ฐจ์ด ์ฐพ๊ธฐ
๋ ์งํฉ ๊ฐ์ ๋์นญ ์ฐจ์ด๋ฅผ ๋ฐํํฉ๋๋ค. ์ํ์ ์ผ๋ก ๋ ์ธํธ์ ์๋ ํญ๋ชฉ์ ์ ์ธํ๊ณ ๋ ์ธํธ์ ๋ชจ๋ ํญ๋ชฉ์ ํฌํจํ๋ ์ธํธ๋ฅผ ๋ฆฌํดํ๋ค๋ ์๋ฏธ์ ๋๋ค. (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'}
์์:
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'}
์งํฉ ๊ฒฐํฉ
๋ ์ธํธ์ ๊ณตํต ํญ๋ชฉ์ด ์์ผ๋ฉด ๋ถ๋ฆฌ ์ธํธ๋ผ๊ณ ํฉ๋๋ค. isdisjoint() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์งํฉ์ด ๊ฒฐํฉ์ธ์ง ๋ถ๋ฆฌ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # False
์์:
even_numbers = {0, 2, 4 ,6, 8}
even_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์ผ์ฐจ ์ฑ๋ฆฐ์ง๋ฅผ ์๋ฃํ์ผ๋ฉฐ ์๋ํจ์ ํฅํ ๋น์ ์ ๊ธธ์ 7๊ฑธ์ ์์ ์์ต๋๋ค. ์ด์ ๋์ ๊ทผ์ก์ ์ํ ๋ช ๊ฐ์ง ํ๋ จ์ ํ์ญ์์ค.
๐ป Exercises: Day 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]
Exercises: Level 1
- ์งํฉ it_companies์ ๊ธธ์ด ์ฐพ๊ธฐ
- it_companies์ 'Twitter' ์ถ๊ฐ
- it_companies ์งํฉ์ ์ฌ๋ฌ IT ํ์ฌ๋ฅผ ํ ๋ฒ์ ์ฝ์
- it_companies ์งํฉ์์ ํ์ฌ ์ค ํ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ ๊ฑฐํ๋ค์ ๋ฒ๋ฆฌ๋ค์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
Exercises: Level 2
- A์ B๋ฅผ ๊ฒฐํฉ
- ๊ต์ฐจ ํญ๋ชฉ ์ฐพ๊ธฐ
- A๋ B์ ๋ถ๋ถ์งํฉ
- A์ B๋ ์๋ก์ ์งํฉ์ ๋๋ค.
- A๋ B์, B๋ A์ ์กฐ์ธ
- A์ B์ ๋์นญ ์ฐจ์ด๋ ๋ฌด์์ ๋๊น
- ์ธํธ๋ฅผ ์์ ํ ์ญ์
Exercises: Level 3
- ์ฐ๋ น์ ์ธํธ๋ก ๋ณํํ๊ณ ๋ชฉ๋ก์ ๊ธธ์ด์ ์ธํธ์ ๊ธธ์ด๋ฅผ ๋น๊ตํฉ๋๋ค. ์ด๋ ๊ฒ์ด ๋ ํฝ๋๊น?
- ๋ฌธ์์ด, ๋ชฉ๋ก, ํํ ๋ฐ ์งํฉ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์ ํ์ ์ฐจ์ด์ ์ ์ค๋ช ํ์ญ์์ค.
- ์ ๋ ๊ต์ฌ์ด๊ณ ์ฌ๋๋ค์๊ฒ ์๊ฐ์ ์ฃผ๊ณ ๊ฐ๋ฅด์น๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ๋ฌธ์ฅ์ ์ฌ์ฉ๋ ๋ ํนํ ๋จ์ด๋ ๋ช ๊ฐ์ ๋๊น? ๋ถํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ๊ณ ์ ํ ๋จ์ด๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ค์ ํฉ๋๋ค.
๐ ์ถํํฉ๋๋ค! ๐