파이썬에서는 집합(Set)을 처리하기 위한 집합 자료형을 제공하고 있다. 집합은 기본적으로 리스트 혹은 문자열을 이용해서 만들 수 있는데, 집합은 다음과 같은 특징을 가진다.
기본에 다루었던 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있었다. 반면에 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다는 특징이 있다. 이와 더불어 집합 자료형에서는 키가 존재하지 않고, 값 데이터만을 담게 된다. 시간복잡도는 사전 자료형과 마찬가지로 O(1)이다.
집합 자료형이 효과적일때
'특정한 데이터가 이미 등장한 적이 있는지 여부'를 체크할 대 매우 효과적이다. 집합 자료형을 초기화할 때는 set() 함수를 이용하거나, 중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분해서 넣으면 된다.
# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5])
print(data)
# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}
print(data)
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
집합 자료형의 연산
기본적인 집합 연산으로는 합집합, 교집합, 차집합 연산이 있다. 파이썬은 이러한 집합 자료형의 연산에 대해서 다루고 있다. 집합 자료형 데이터 사이에서 합집합을 계산할 때는 '|'를 이용한다. 또한 교집합은 '&', 차집합은 '-'를 이용한다.
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])
print(a | b) # 합집합
print(a & b) # 교집합
print(a - b) # 차집합
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
집합 자료형 관련 함수
집합 자료형 또한 다른 자료형과 마찬가지로 다양한 함수가 존재한다. 하나의 집합 데이터에 값을 추가할 때는 add() 함수를 이용할 수 있다. update() 함수는 여러 개의 값을 한꺼번에 추가하고자 할 때 사용한다. 그리고 특정한 값을 제거할 때는 remove() 함수를 이용할 수 있다. 이때 add(), remove() 함수는 모두 시간 복잡도가 O(1)이다.
data = set([1, 2, 3])
print(data)
# 새로운 원소 추가
data.add(4)
print(data)
# 새로운 원소 여러 개 추가
data.update([5, 6])
print(data)
# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}