2 분 소요


set(집합) 자료형

  • set은 수학 용어로 집합이라는 의미이다.
  • 중괄호 {}를 활용해서 만들 수 있다.
In [1]:
a = {1, 2, 3}
b = {2, 3, 4}
  • 순서에 의미가 없고 중복을 허용하지 않는다.
In [2]:
c = {1, 1, 1, 2, 2, 2}
c
Out [2]:
{1, 2}
  • 네 가지 연산자를 조합해 합집합( ), 교집합(&), 차집합(-), 대칭차집합(^)을 구할 수 있다
In [3]:
print(a | b)
print(a & b)
print(a - b)
print(a ^ b) # == (a | b) - (a & b)
Out [3]:
{1, 2, 3, 4}
{2, 3}
{1}
{1, 4}

set의 요소 추가, 제거 메서드

In [4]:
a = set()
  • add() : 요소를 하나 추가
In [5]:
b = [10, 20, 30, 40, 10, 30]
for i in b:
    a.add(i)
print(a)
Out [5]:
{40, 10, 20, 30}

  • update() : 리스트를 한꺼번에 추가
In [6]:
c = [1, 2, 3, 5, 2, 1]
a.update(c)
print(a)
Out [6]:
{1, 2, 3, 5, 40, 10, 20, 30}

  • remove() : 특정 요소를 제거
In [7]:
a.remove(20)
print(a)
Out [7]:
{1, 2, 3, 5, 40, 10, 30}

In [8]:
# set 내부에 값이 없으면 KeyError 발생
a.remove(20)
print(a)
Out [8]:

---------------------------------------------------------------------------

KeyError Traceback (most recent call last)

Cell In[8], line 2 1 # set 내부에 값이 없으면 KeyError 발생 ----> 2 a.remove(20) 3 print(a)

KeyError: 20

  • discard() : 특정 요소가 존재하면 제거
In [9]:
a.discard(30)
print(a)
Out [9]:
{1, 2, 3, 5, 40, 10}

In [10]:
# set 내부에 값이 없어도 Error가 발생하지 않음
a.discard(30)
print(a)
Out [10]:
{1, 2, 3, 5, 40, 10}

  • pop() : 임의의 요소를 반환하고 set에서 제거
In [11]:
# set이 비어있다면 KeyError 발생
print(a.pop())
print(a)
Out [11]:
1
{2, 3, 5, 40, 10}

  • clear() : 모든 요소 제거
In [12]:
a.clear()
print(a)
Out [12]:
set()

set의 비교 메서드

  • union() : 합집합을 반환(연산자 와 같다)
In [13]:
a = {1, 2, 3}
b = {2, 3, 4}
a.union(b) # b가 리스트 형태여도 된다.
Out [13]:
{1, 2, 3, 4}
  • intersection() : 교집합을 반환(연산자 &와 같다)
In [14]:
a = {1, 2, 3}
b = {2, 3, 4}
print(a.intersection(b))
print(a)
Out [14]:
{2, 3}
{1, 2, 3}

  • intersection_update() : 해당 set을 교집합으로 변경
In [15]:
a = {1, 2, 3}
b = {2, 3, 4}
a.intersection_update(b)
a
Out [15]:
{2, 3}
  • difference() : 차집합을 반환(연산자 -와 같다)
In [16]:
a = {1, 2, 3}
b = {2, 3, 4}
print(a.difference(b))
print(a)
Out [16]:
{1}
{1, 2, 3}

  • difference_update() : 해당 set을 차집합으로 변경
In [17]:
a = {1, 2, 3}
b = {2, 3, 4}
a.difference_update(b)
print(a)
Out [17]:
{1}

  • symmetric_difference() : 대칭차집합을 반환(연산자 ^와 같다)
In [18]:
a = {1, 2, 3}
b = {2, 3, 4}
print(a.symmetric_difference(b))
print(a)
Out [18]:
{1, 4}
{1, 2, 3}

  • symmetric_difference_update() : 해당 set을 대칭차집합으로 변경
In [19]:
a = {1, 2, 3}
b = {2, 3, 4}
a.symmetric_difference_update(b)
print(a)
Out [19]:
{1, 4}

  • isdisjoint() : 교집합이 존재하는지 여부(True: 교집합 없음, False: 교집합 있음)
In [20]:
a = {1, 2, 3}
b = {4}
a.isdisjoint(b)
Out [20]:
True
  • issubset() : 해당 set이 부분집합인지 여부
In [21]:
a = {1, 2, 3}
b = {2, 3}
print(b.issubset(a))
print(b <= a)
Out [21]:
True
True

  • issuperset() : 해당 set이 상위집합(초집합)인지 여부
In [22]:
a = {1, 2, 3}
b = {2, 3}
print(a.issuperset(b))
print(a >= b)
Out [22]:
True
True

Reference

댓글남기기