Python 에서의 Set

Ruah·2024년 9월 17일

theory

목록 보기
9/11

Set 이란?

집합(Set) 자료구조는 중복을 허용하지 않고, 순서가 없는(unordered)자료형.
수학에서의 집합과 동일한 개념으로서, 고유한 요소들의 모음.
해시 가능한(immutable)데이터 타입의 요소들로 구성되며, 리스트나 딕셔너리와 같은 변경가능한(mutable)객체는 포함 불가.

Set의 특징

1. 중복 없는 요소 저장

  • 집합은 중복된 요소를 허용 하지 않는다. 동일한 값을 여러번 추가해도 하나의 요소로 인식.
  • 데이터의 고유성 보장 가능

2. 순서가 없음.

  • 순서가 없는 자료형이므로, 인덱싱이나 슬라이싱은 사용불가
  • 요소의 순서는 예측할 수 없으며, 반복할 때마다 순서가 달라질 수 있음.

3. 변경 가능(Mutable)

  • 집합 자체는 변경 가능하므고, 요소의 추가 및 삭제 가능
  • But, 집합의 요소들은 변경 불가능한 (immutable)타입이어야함.

세트 정의

{} 또는 set()을 통해 정의

my_set = {1, 2, 2, 3}          # {1, 2, 3}

my_set = set([1, 2, 3, 4, 5])

good_set = set("good")         # {"g", "o", "d"}
  • 빈집합을 생성하려면 set()함수를 사용.
  • 빈집합을 생성하기 위해 my_set = {} 를 사용하면 빈 딕셔너리가 되므로 주의
empty_set = set()

Set의 기본 연산

요소 추가

add(element)

  • 집합에 단일 요소를 추가
my_set = {1, 2, 3}
my_set.add(4)           # {1, 2, 3, 4}

update(iterable)

  • 여러 요소를 한꺼번에 추가
my_set.update([5, 6. 7])   #{ 1, 2, 3, 4, 5, 6, 7 }

요소 제거

remove(element)

  • 해당 요소를 제거. 요소가 없으면 KeyError 발생
my_set.remove(3)     # {1, 2, 4, 5, 6, 7}

discard(element)

  • 해당 요소를 제거. 요소가 없어도 오류 발생 안됨
my_set.discard(10)  # 해당 요소가 없으나 오류 없음

pop()

  • 집합에서 임의의 요소를 제거하고 반환. 집합이 비어있다면 KeyError 발생
element = my_set.pop()   #임의 요소 제거

clear()

  • 집합의 모든 요소를 제거하여 빈 집합으로 만듬.
my_set.clear()     # set() 빈 집합

집합 연산

합집합(Union)

  • | 연산자 또는 union() 메서드 사용
set1 = {1, 2, 3}
set2 = {3, 4, 5}

union_set = set1 | set2         # {1, 2, 3, 4, 5}
#또는
union_set = set1.union(set2)    # {1, 2, 3, 4, 5}

교집합(Intersecton)

  • & 연산자 또는 intersection() 메서드 사용
intersection_set = set1 & set2   # {3}
# 또는
intersection_set = set1.intersection(set2)

차집합(Difference)

  • - 연산자 또는 difference()메서드 사용
difference_set = set1 - set2     #{1, 2}
#또는
difference_set = set1.difference(set2)    # {1, 2}

대칭 차집합(Symmetric Difference)

  • 대칭 차집합은 교집합을뺀 양쪽의 모든 요소.
  • ^ 연산자 또는 symmetric_difference() 메서드 사용
symmetric_diff_set = set1 ^ set2   # {1, 2, 4, 5}

부분집합 및 상위집합 검사

  • issubset(other_set) : 현재 집합이 other_set의 부분집합인지 검사
set_a = {1, 2}
set_b = {1, 2, 3, 4}
is_subset = set_a.issubset(set_b)  # True
  • ussuperset(other_set) : 현재 집합이 other_set의 상위집합인지 검사
is_superset = set_b.issubset(set_a)  #True

집합의 길이 확인

my_set = {1, 2, 3}
length = len(my_set)   # 3

요소 존재 여부 확인

my_set = { 1, 2, 3 }
exists = 2 in my_set   # True

집합의 주요 메서드

  • add(element): 요소 하나를 집합에 추가.
  • update(iterable): 여러 요소를 집합에 추가
  • remove(element): 요소를 제거 (존재하지 않으면 오류 발생).
  • discard(element): 요소를 제거 (존재하지 않아도 오류 없음).
  • pop(): 임의의 요소를 제거하고 반환.
  • clear(): 모든 요소 제거.
  • union(*others): 여러 집합의 합집합 반환.
  • intersection(*others): 여러 집합의 교집합 반환.
  • difference(*others): 여러 집합과의 차집합 반환.
  • symmetric_difference(other): 두 집합의 대칭 차집합 반환.
  • issubset(other): 부분집합 여부 검사.
  • issuperset(other): 상위집합 여부 검사.
  • copy(): 집합의 얕은 복사본 반환.
profile
집요한 주니어 개발자의 호되게 당했던 기록

0개의 댓글