# Set 파이썬의 set 자료형은 수학에서의 집합 개념을 그대로 가져온 자료형입니다. 즉, 중복되는 요소를 허용하지 않고 순서가 없는 자료형입니다. - set 세트의 아이템은 중복될 수 없으며, 순서도 없습니다. 중괄호(`{`, `}`)를 사용해서 표현합니다. ## 특징 * 중복 허용 X: 같은 값을 여러 번 넣어도 하나의 값만 유지됩니다. * 순서 없음: 요소들이 특정 순서로 저장되지 않습니다. 따라서 인덱싱을 통해 요소에 접근할 수 없습니다. * 변경 가능: 요소를 추가하거나 삭제할 수 있습니다. ## set 자료형 생성하기 ```python a = {'apple', 'orange', 'banana'} b = set('apple', 'orange', 'banana') empty_set = set() my_set = {1, 2, 3, 2} # 중복된 2는 하나만 포함 ``` 불변 세트를 만들려면 frozenset()를 사용합니다. Immutable 세트는 값을 수정할 수 없습니다. ```python c = frozenset('apple', 'orange', 'banana') ``` 리스트와 달리 순서가 없으므로, `my_set[0]`과 같이 대괄호 안에 인덱스를 사용해서 요소에 접근할 수 없습니다. 세트 안에 중첩된 세트를 넣을 수도 없습니다. ## 아이템의 추가 / 삭제 add() 메서드를 사용하여 요소를 추가합니다. ```python my_set.add(4) ``` remove() 메서드를 사용하여 요소를 삭제합니다. 없는 요소를 삭제하려고 하면 KeyError가 발생합니다. discard() 메서드는 요소가 없어도 에러 없이 무시합니다. ```python my_set.remove(2) my_set.discard(5) # 5가 없어도 에러 발생하지 않음 ``` ## 아이템 포함 여부 세트 안에 어떤 값이 있는지 확인하려면 `in`을 사용합니다. ```python a = {'apple', 'orange', 'banana'} 'orange' in a # True ``` ## 집합 연산 논리 연산자 또는 set의 메서드를 사용해서 집합 연산을 할 수 있습니다. ```python a = {1, 2, 3} b = {3, 4, 5, 6} a | b # 합집합 {1,2,3,4,5,6} set.union(a, b) a & b # 교집합 {3} set.intersection(a, b) a - b # 차집합 {1,2} set.difference(a, b) a ^ b # 대칭 차집합 set.symmetric_difference(a, b) ``` - `set.union()`, `|` : 합집합 - `set.intersection()`, `&` : 교집합 - `set.difference()`, `-` : 차집합 - `set.symmetric_difference()` - `update(세트)`, `|=` - `intersection_update(세트)`, `&=` - `difference_update(세트)`, `-=` - `symmetric_update(세트)`, `^=` 비교 연산자를 사용해서 포함 관계를 확인할 수 있습니다. ```python {1,2,3} <= {1,2,3,4,5} # 다른 집합의 부분집합인지 여부 {1,2,3}.issubset({1,2,3,4,5}) {1,2,3} < {1,2,3,4,5} # 다른 집합의 진부분집합인지 여부 {1,2,3} >= {1,2,3,4,5} # 다른 집합의 상위집합인지 여부 {1,2,3}.issuperset({1,2,3,4,5}) {1,2,3} > {1,2,3,4,5} # 다른 집합의 진상위집합인지 여부 {1,2,3} == {1,2,3,4,5} # 서로 같은지 여부 {1,2,3} != {1,2,3,4,5} {1,2,3}.isdisjoint({1,2,3,4,5}) # 서로 겹치는 요소가 없으면 True가 반환됩니다. ```