셋(set)은 값은 버리고 키만 남은 딕셔너리와 같다
3.5.1 셋 생성하기: set()
empty_set = set()
empty_set
set()
even_numbers = {0, 2, 4, 6, 8}
even_numbers
{0, 2, 4, 6, 8}
odd_numbers = {1, 3, 5, 7, 9}
odd_numbers
{1, 3, 5, 7, 9}
{}는 빈셋을 생성하는 것이 아니라 빈 딕셔너리를 생성한다. {}대신 set()을 출력한다. 이미 파이썬에서 딕셔너리가 {}를 가지고 있기 때문이다.
3.5.2 데이터 타입 변환하기: set()
set('letters')
{‘e’, ‘l’, ‘r’, ‘s’, ‘t’}
set(['Dahser', 'Dancer', 'Prancer', 'Mason-Dixon'])
{‘Dahser’, ‘Dancer’, ‘Mason-Dixon’, ‘Prancer’}
set(('Ummagumma', 'Echoes', 'Atom Hear Mohter'))
{‘Atom Hear Mohter’, ‘Echoes’, ‘Ummagumma’}
set({'apple' : 'red' , 'orange': 'orange', 'cherry': 'red'})
{‘apple’, ‘cherry’, ‘orange’}
3.5.2 으로 값 멤버십 테스트하기
drinks = {
'martini': {'vodka', 'vermouth'},
'black russian': {'vodka', 'kahlua'},
'white russian': {'cream', 'kahlua', 'vodka'},
'manhattan': {'rye', 'vermouth', 'vodka'},
'screwdriver': {'orange juice', 'vodka'}
}
for name, contents in drinks.items():
if 'vodka' in contents:
print(name)
martini black russian white russian manhattan screwdriver
for name, contents in drinks.items():
if 'vodka' in contents and not ('vermouth' in contents or 'cream' in contents):
print(name)
black russian screwdriver
3.5.4 콤비네이션과 연산자
for name, contents in drinks.items():
if contents & {'vermouth', 'orange juice'}:
print(name)
martini manhattan screwdriver
for name, contents in drinks.items():
if 'vodka' in contents and not contents & {'vermouth', 'cream'}:
print(name)
black russian screwdriver
bruss = drinks['black russian']
wruss = drinks['white russian']
a = {1,2}
b = {2,3}
&
연산자와intersection()
함수를 이용하여 교집합(양쪽 셋에 모두 들어 있는 멤버)를 구함a & b
{2}
a.intersection(b)
{2}
bruss & wruss
{‘kahlua’, ‘vodka’}
|
연산자와union()
함수를 이용하여 합집합(각 셋에 멤버 모두)를 구함a | b
{1, 2, 3}
a.union(b)
{1, 2, 3}
bruss | wruss
{‘cream’, ‘kahlua’, ‘vodka’}
bruss.union(wruss)
{‘cream’, ‘kahlua’, ‘vodka’}
-
연산자와difference()
함수를 이용하여 차집합(첫 번째 셋에는 있지만 두 번째 셋에는 없는 멤버)을 구함a - b
{1}
a.difference(b)
{1}
bruss - wruss
set()
wruss - bruss
{‘cream’}
^
연산자나symmetric_difference()
함수를 이용하여 대칭 차집합(한쪽 셋에는 들어 있지만 양쪽 모두에 들어 있지 않은 멤버)을 구함a ^ b
{1, 3}
a.symmetric_difference(b)
{1, 3}
bruss ^ wruss
{‘cream’}
<=
연산자나issubset()
함수를 이용하여 첫 번째 셋이 두번째 셋의 부분집합 인지 구함a <= b
False
a.issubset(b)
False
bruss <= wruss
True
블랙 러시안에 크림을 추가 하면 화이트 러시안이 된다 그래서 wruss는 bruss의 상위 집합 이다
a <= a
True
a.issubset(a)
True
bruss <= bruss
True
모든 셋은 자신의 서브셋이다
- 첫 번째 셋이 두 번째 셋의 진부분집합이 되러면, 두 번째 셋에는 첫번째 셋의 모든 멤버를 포함한 그 이상의 멤버가 있어야 한다.
<
연산자를 사용해서 구함.a < b
False
a < a
False
bruss < wruss
True
- 슈퍼셋은 서브셋(부분집합)의 반대다.
>=
연산자나issuperset()
함수를 이용하여 첫 번째 셋이 두 번째 셋의 슈퍼셋인지 구함.a >= b
False
a.issuperset(b)
False
wruss >= bruss
True
a >= a
True
a.issuperset(a)
True
모든 셋은 자신의 슈퍼셋이다.
- 마지막으로
>
연산자를 사용하여 첫 번째 셋이 두 번째 셋의 진상위집합 인지 확인해봄.
첫 번째 셋이 두번쨰 셋의 진상위집합이 되려면, 첫 번째 셋에는 두 번째 셋의 모든 멤버를 포함한 그 이상의 멤버가 있어야 한다.
a > b
False
wruss > bruss
True
a > a
False
모든 셋은 자신의 진상위집합이 될 수 없다.
Comments