Language/Python

[Python] 집합(Set) 자료형

개발기록자 2023. 5. 2.

파이썬은 다양한 자료형을 지원하며, 이 중에서도 집합(Set) 자료형은 중복된 값을 제거하고 유일한 값만을 저장할 수 있어 유용하게 사용됩니다. 이번 글에서는 파이썬의 집합 자료형에 대해 알아보겠습니다.


집합(Set)이란

집합이란 순서가 없고 중복이 없는 값들의 묶음(집합)을 나타내는 자료형입니다. 다른 자료형과 비교했을 때 중복된 값을 제거하고 유일한 값을 저장할 때 유용합니다. 집합은 중괄호({ })를 사용하며, 각 값들은 쉼표(,)로 구분합니다.


집합을 생성하는 방법

파이썬에서 집합을 생성하는 방법을 아래 예시코드를 보면서 알아보겠습니다.

 

1. 중괄호({ })를 이용한 방법

my_set = {1, 2, 3, 4, 5}

print(type(my_set)) # <class 'set'>
print(my_set) # {1, 2, 3, 4, 5}

 

2. set()을 이용한 방법

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

print(my_set) # {1, 2, 3, 4, 5}

 

※ 주의

중괄호({ })를 이용하여 빈 set을 생성하려고 하면 Dictionary가 생성됩니다. 따라서 빈 set을 생성하기 위해서는 set()을 사용해야 합니다.

# 중괄호({ })를 이용하여 빈 set 생성하려고하면 dictionary가 생성됩니다.
my_set1 = {}

print(type(my_set1)) # <class 'dict'>
# 빈 set을 생성하려면 set()사용
my_set2 = set()

print(type(my_set2)) # <class 'set'>

집합의 특징

① 집합은 고유한 값을 가집니다.

집합은 고유한 값을 가지며 중복을 허용하지 않습니다.

my_set = {1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 5}

# 중복된 값은 자동으로 제거됩니다.
print(my_set) # {1, 2, 3, 4, 5}

 

② 집합은 순서가 없습니다.

집합은 순서가 없기 때문에 인덱싱으로 접근할 수 없습니다.

my_set = {1, 2, 3, 4, 5}

# 두번째 요소 선택
my_set[1]

# Traceback (most recent call last):
#   File ".\test.py", line 4, in <module>
#     my_set[1]
# TypeError: 'set' object is not subscriptable

 

③ 변경이 가능합니다.

집합은 가변 자료형이기 때문에 변경이 가능합니다.

my_set = {1, 2, 3, 4, 5}

# set은 변경 가능한 자료형이기 때문에 값을 추가하거나 제거할 수 있다.
my_set.add(6)
print(my_set)  # {1, 2, 3, 4, 5, 6}

my_set.remove(6)
print(my_set)  # {1, 2, 3, 4, 5}

추가와 삭제

1. 요소 추가하기

- add()로 추가하기(요소 1개 추가)

my_set1 = {1, 2, 3}

my_set1.add(4)
print(my_set1) # {1, 2, 3, 4}

 

- update()로 추가하기(요소 1개 이상 추가)

my_set2 = {1, 2, 3}

my_set2.update([3, 4, 5])
print(my_set2) # {1, 2, 3, 4, 5}

 

2. 요소 삭제하기

- remove()로 삭제하기(특정 요소 제거)

my_set1 = {1, 2, 3, 4, 5}

my_set1.remove(5)
print(my_set1) # {1, 2, 3, 4}

 

- pop()로 삭제하기(임의의 요소 제거)

my_set2 = {1, 2, 3, 4, 5}

p = my_set2.pop()
print(my_set2) # {2, 3, 4, 5}
print(p) # 1

 

※ 주의

요소를 삭제할 때, 삭제하려는 요소가 존재하지 않을 경우 KeyError가 발생합니다.

 

my_set3 = {1, 2, 3, 4, 5}

# 6이라는 값을 가지는 요소를 삭제합니다.
my_set3.remove(6)

# Traceback (most recent call last):
#   File ".\test.py", line 4, in <module>
#     my_set3.remove(6)
# KeyError: 6

집합 연산

메소드 또는 기호를 사용하여 집합 연산을 할 수 있습니다. 아래 예시 코드를 보면서 알아보겠습니다.

 

1. 교집합

- intersection() 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

intersection1 = my_set1.intersection(my_set2)
print(intersection1)  # {3, 4, 5}

 

- `&` 기호 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

intersection2 = my_set1 & my_set2
print(intersection2)  # {3, 4, 5}

 

2. 합집합

- union() 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

union1 = my_set1.union(my_set2)
print(union1)  # {1, 2, 3, 4, 5, 6, 7}

 

- `|` 기호 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

union2 = my_set1 | my_set2
print(union2)  # {1, 2, 3, 4, 5, 6, 7}

 

3. 차집합

- difference() 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

difference1 = my_set1.difference(my_set2)
print(difference1)  # {1, 2}

 

- `-` 기호 사용

my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}

difference2 = my_set1 - my_set2
print(difference2)  # {1, 2}

이번 글에서는 파이썬의 집합에 대해 알아보았습니다. 집합에서는 교집합, 합집합, 차집합 등 다양한 연산이 가능하며, 이를 위한 메소드들이 제공됩니다. 필요에 따라 적절한 메소드를 사용하면 되겠습니다.


함께 보면 좋은 글

 

[Python] 리스트(List) 자료형

파이썬은 다양한 자료형을 지원하며, 그중 리스트(List)는 자주 사용되는 자료형 중 하나입니다. 이번 글에서는 파이썬의 리스트에 대해 알아보겠습니다. 리스트(List)란? 리스트는 순서가 있는 값

dev-records.tistory.com

 

 

댓글