Python 집합 (Sets)

파이썬의 집합 (Set)은 말 그대로 요소 (Item)들의 모음입니다.

_images/sets_01.png

중괄호 사이에 위치하는 요소들 간에는 순서가 없고, 따라서 인덱싱을 사용할 수 없습니다.

또한 집합은 두 개 이상의 같은 값을 가질 수 없습니다.

파이썬에서 집합 자료형을 다루는 다양한 방법에 대해 소개합니다.


집합 만들기

파이썬의 집합 자료형은 {} 또는 set() 함수를 이용해서 만들어집니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit2 = set([1, 2, 3, 4])
print(set_fruit2)

set_fruit3 = set('apple')
print(set_fruit3)
{'orange', 'apple', 'banana'}
{1, 2, 3, 4}
{'a', 'p', 'e', 'l'}

set(‘apple’)은 ‘apple’의 각각의 문자를 갖는 집합을 만드는데, 문자 ‘p’는 한 번만 포함됩니다.

빈 집합을 만들기 위해서는 {} 대신 set()를 사용합니다. {}을 사용하면 딕셔너리가 만들어집니다.



집합 요소 값 얻기

파이썬 리스트, 튜플, 딕셔너리와 달리 집합의 요소 값들은 직접 접근할 수 없습니다.

하지만 for 반복문을 이용해서 집합의 모든 값들을 얻을 수 있습니다.

set_fruit = {'apple', 'banana', 'orange'}

for fruit in set_fruit:
  print(fruit)
banana
apple
orange


집합 값 추가하기

집합에 요소를 추가하기 위해서는 add() 또는 update() 메서드를 사용합니다.

add()

집합에 한 개의 값을 추가할 때 add() 메서드를 사용할 수 있습니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.add('watermelon')
print(set_fruit)
{'apple', 'orange', 'banana'}
{'apple', 'orange', 'banana', 'watermelon'}

‘watermelon’ 요소가 집합에 추가됩니다.


update()

집합에 여러 개의 요소를 추가하기 위해서 update() 메서드를 사용할 수 있습니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.update(['watemelon', 'mango'])
print(set_fruit)
{'orange', 'banana', 'apple'}
{'banana', 'apple', 'mango', 'watemelon', 'orange'}


집합 값 삭제하기

집합의 요소를 삭제하기 위해서는 discard(), remove(), pop() 메서드를 사용합니다.

discard()

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.discard('apple')
print(set_fruit)

set_fruit.discard('mango')
print(set_fruit)
{'orange', 'banana', 'apple'}
{'orange', 'banana'}
{'orange', 'banana'}

삭제할 요소가 없을 때는 집합에 변화가 생기지 않습니다.


remove()

remove() 메서드의 동작은 discard()와 유사하지만, 삭제할 요소가 없을 때 에러를 발생하는 점이 다릅니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.remove('apple')
print(set_fruit)

set_fruit.remove('mango')
print(set_fruit)
{'apple', 'orange', 'banana'}
{'orange', 'banana'}
Traceback (most recent call last):
File "main.py", line 7, in <module>
  set_fruit.remove('mango')
KeyError: 'mango'

pop()

집합에서 요소를 삭제하기 위해 pop() 메서드를 사용할 수도 있습니다.

pop() 메서드는 보통 마지막 요소를 뽑아서 반환하는 동작을 하지만, 집합은 순서가 없기 때문에 어떤 요소가 반환될지 알 수 없습니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.add('mango')
print(set_fruit)
print(set_fruit.pop())
print(set_fruit)
{'orange', 'banana', 'apple'}
{'orange', 'banana', 'apple', 'mango'}
orange
{'banana', 'apple', 'mango'}

clear()

clear() 메서드는 집합을 빈 집합으로 만듭니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

set_fruit.clear()
print(set_fruit)
{'orange', 'apple', 'banana'}
set()

집합 제거하기

del

del 키워드를 사용해서 집합을 제거할 수 있습니다.

set_fruit = {'apple', 'banana', 'orange'}
print(set_fruit)

del set_fruit
print(set_fruit)
{'apple', 'banana', 'orange'}
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    print(set_fruit)
NameError: name 'set_fruit' is not defined

set_fruit 집합을 제거했습니다.

제거할 집합이 없다면 에러를 발생합니다.



집합 연산

파이썬의 집합 자료형을 이용해서 합집합, 교집합, 차집합, 대칭차집합과 같은 수학적 집합 연산을 수행할 수 있습니다.

집합 연산을 위해 union(), intersection(), difference(), symmetric_difference()과 같은 다양한 메서드를 사용합니다.


union() - 합집합


_images/sets_union.png

두 집합의 합집합을 얻기 위해 union() 메서드를 사용합니다.

set_A = {1, 2, 4, 7}
set_B = {2, 3, 7, 9}

print(set_A.union(set_B))
print(set_B.union(set_A))
print(set_A | set_B)
{1, 2, 3, 4, 7, 9}
{1, 2, 3, 4, 7, 9}
{1, 2, 3, 4, 7, 9}

| 연산자는 union() 메서드와 같은 동작을 구현합니다.


intersection() - 교집합


_images/sets_intersection.png

두 집합의 교집합을 얻기 위해 intersection() 메서드를 사용합니다.

set_A = {1, 2, 4, 7}
set_B = {2, 3, 7, 9}

print(set_A.intersection(set_B))
print(set_B.intersection(set_A))
print(set_A & set_B)
{2, 7}
{2, 7}
{2, 7}

& 연산자는 intersection() 메서드와 같은 동작을 구현합니다.


difference() - 차집합


_images/sets_difference01.png

_images/sets_difference02.png

두 집합의 차집합을 얻기 위해 difference() 메서드를 사용합니다.

set_A = {1, 2, 4, 7}
set_B = {2, 3, 7, 9}

print(set_A.difference(set_B))
print(set_A - set_B)
print(set_B.difference(set_A))
print(set_B - set_A)
{1, 4}
{1, 4}
{9, 3}
{9, 3}

- 연산자는 difference() 메서드와 같은 동작을 구현합니다.


symmetric_difference() - 대칭차집합


_images/sets_symmetric_difference.png

두 집합의 대칭차집합을 얻기 위해 symmetric_difference() 메서드를 사용합니다.

set_A = {1, 2, 4, 7}
set_B = {2, 3, 7, 9}

print(set_A.symmetric_difference(set_B))
print(set_B.symmetric_difference(set_A))
print(set_A ^ set_B)
{1, 3, 4, 9}
{1, 3, 4, 9}
{1, 3, 4, 9}

^ 연산자는 symmetric_difference() 메서드와 같은 동작을 구현합니다.



이전글/다음글