05_셋
- 셋(set)은 값은 버리고 키만 남은 딕셔너리와 같다. 딕셔너리와 마찬가지로 각 키는 유일해야 하며, 존재하는지 여부만 판단하기 위해 사용한다.
셋 생성하기 : set()
- 셋을 생성할 때는 set() 함수 혹은 중괄호 안에 콤마로 구분된 하나 이상의 값을 넣으면 된다.
1 2 3 4 5 | empty_set = set() print(empty_set) example_set = {0, 1, 2, 3, 4, 5} print(example_set) | cs |
데이터 타입 변환가기 : set()
- 리스트, 문자열, 튜플, 딕셔너리로부터 중복된 값을 버린 셋을 생성할 수 있다.
1 2 | test_set = set('letters') print(test_set) | cs |
- letters 에 'e'와 't' 가 두 개씩 있어도, 셋에는 이 문자들이 하나씩 포함되어 있다.
in으로 값 멤버십 테스트하기
- 이것은 일반적으로 사용되는 셋의 용도이다. drinks 라는 딕셔너리를 만들어보자. 각 키는 음료의 이름이고, 값은 음료에 필요한 재료들의 셋이다. 해당 딕셔너리에서 vodka가 포함된 음료를 찾아보자.
1 2 3 4 5 6 7 8 9 10 11 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } for name, contents in drinks.items(): if 'vodka' in contents: print(name) | cs |
콤비네이션과 연산자
- 셋값의 콤비네이션(조합)을 어떻게 확인할까? 오렌지 주스(orange juice) 또는 버몬트(vermouth)가 들어가 있는 음료를 골라내려고 할 때, 셋 인터섹션 연산자(&)를 사용하자.
1 2 3 4 5 6 7 8 9 10 11 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } for name, contents in drinks.items(): if contents & { 'vermouth', 'orange juice' }: print(name) | cs |
- & 연산자의 결과는 우리가 비교하고자 했던 두 재료의 모든 항목이 포함된 셋이다. 원하는 값이 없다면, &은 False로 간주되는 빈 셋을 반환한다.
1. 교집합 구하기 - 인터섹션
- & 연산자 및 intersection 함수 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] test1 = bruss & wruss test2 = bruss.intersection(wruss) print(test1) print(test2) | cs |
2. 합집합 구하기 - 유니온
- | 연산자 및 union 함수 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] test1 = bruss | wruss test2 = bruss.union(wruss) print(test1) print(test2) | cs |
3. 차집합 구하기 - 디퍼런스
- - 연산자 및 difference 함수 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] test1 = wruss - bruss test2 = wruss.difference(bruss) print(test1) print(test2) | cs |
4. 대칭차집합 구하기 - 익스클루시브
- 한쪽 셋에는 들어 있지만 양쪽 모두에 들어 잇는 않은 멤버 구할 때 사용
- ^ 연산자 및 symmetric_difference 함수 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] test1 = bruss ^ wruss test2 = bruss.symmetric_difference(wruss) print(test1) print(test2) | cs |
5. 부분 집합
- 하위인지 체크하는 서브셋은 <= 연산자 또는 issubset() 함수를 사용하고, 상위인지 체크하는 슈퍼셋은 >= 연산자 또는 issuperset() 함수를 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] # bruss가 wruss의 서브셋인지 확인 test1 = bruss <= wruss test2 = bruss.issubset(wruss) print(test1) print(test2) # wruss가 bruss의 슈퍼셋인지 확인 test3 = wruss >= wruss test4 = wruss.issuperset(bruss) print(test3) print(test4) | cs |
6. 진 부분 집합
- 첫번째 셋이 두번째 셋의 프로퍼 서브셋이 되려면, 두번재 셋에는 첫번째 셋의 모든 멤버를 포함한 그 이상의 멤버가 되어야 한다.( 두번째 멤버가 첫번째 멤버를 포함 ), 첫번째 셋이 두번째 셋의 프로퍼 슈퍼셋이 되려면, 첫번째 셋이 두번째의 모든 멤버를 포함해야 한다.
- 프로퍼 서브셋은 < 연산자로, 프로퍼 슈퍼셋은 > 연산자로 확인 가능하다.
- 모든 셋은 자신의 프로퍼 슈퍼셋이 될 수 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | drinks = { 'martini' : { 'vodka', 'vermouth' }, 'black russian' : { 'vodka', 'kahlua' }, 'white russian' : { 'cream', 'kahlua', 'vodka' }, 'manhattan' : { 'cream', 'kahlua', 'vodka' }, 'crewdriver' : { 'orange juice', 'vodka' } } bruss = drinks['black russian'] wruss = drinks['white russian'] # 프로퍼 서브셋인지 확인 print(bruss < wruss) # 프로퍼 슈버셋인지 확인 print(wruss > bruss) | cs |
'Python' 카테고리의 다른 글
04_딕셔너리 (0) | 2018.01.20 |
---|---|
03_튜플 (0) | 2017.12.30 |
02_리스트 (0) | 2017.12.17 |
01_파이 재료 : 숫자, 문자열, 변수 (0) | 2017.12.10 |
00_Python 시작하기(설치) (0) | 2017.11.15 |