Python/Python

파이썬의 집합(Set) 자료형 소개

임베디드 친구 2025. 6. 27. 19:55
728x90
반응형

파이썬의 집합(Set) 자료형 소개

안녕하세요, '소프트웨어 공장'을 찾아주신 여러분! 오늘은 파이썬의 기본 자료구조 중 하나인 집합(Set) 에 대해 알아보려고 합니다. 파이썬에서 집합은 매우 유용한 자료형으로, 특히 중복을 제거하거나 교집합, 합집합 등의 집합 연산을 효율적으로 처리할 때 유용합니다. 이번 포스팅에서는 파이썬 집합의 특징과 기초적인 사용법에 대해 소개해드리겠습니다.

1. 집합(Set) 자료형이란?

집합(Set)은 고유한 요소들의 모임을 나타내는 자료형입니다. 수학에서의 집합과 마찬가지로 중복을 허용하지 않으며, 요소의 순서가 중요하지 않습니다. 파이썬에서는 집합을 통해 다양한 집합 연산을 간편하게 수행할 수 있습니다.

집합은 다음과 같은 특징을 가지고 있습니다:

  • 중복된 요소를 허용하지 않습니다.
  • 순서가 없기 때문에 인덱스로 접근할 수 없습니다.
  • 빠른 멤버십 테스트가 가능합니다. (예: 특정 요소가 집합에 존재하는지 확인)

집합은 파이썬의 기본 데이터 타입 중 하나이며, 다른 언어에서의 HashSet과 비슷한 역할을 합니다.

2. 집합 생성 방법

집합을 생성하는 방법은 두 가지가 있습니다: 중괄호를 사용하는 방법과 set() 함수를 사용하는 방법입니다.

# 중괄호를 사용하여 집합 생성
my_set = {1, 2, 3, 4, 5}
print(my_set)  # 출력: {1, 2, 3, 4, 5}

# set() 함수를 사용하여 집합 생성
another_set = set([1, 2, 3, 3, 4])
print(another_set)  # 출력: {1, 2, 3, 4} (중복 제거)

중괄호 {} 를 사용하여 집합을 생성할 수 있으며, set() 함수를 사용하여 리스트나 다른 반복 가능한 객체를 집합으로 변환할 수 있습니다. 주의할 점은, 빈 집합을 생성할 때는 {}가 아닌 set()을 사용해야 합니다. {}는 빈 딕셔너리를 나타내기 때문입니다.

# 빈 집합 생성
empty_set = set()
print(type(empty_set))  # 출력: <class 'set'>

3. 집합의 기초적인 조작 방법

3.1 요소 추가하기 (add() 메서드)

집합에 요소를 추가하려면 add() 메서드를 사용합니다. 중복된 값을 추가하려고 하면 아무 변화가 없습니다.

my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 출력: {1, 2, 3, 4}

my_set.add(2)  # 이미 존재하는 요소 추가
print(my_set)  # 출력: {1, 2, 3, 4} (중복된 요소는 추가되지 않음)

3.2 요소 제거하기 (remove()discard() 메서드)

집합에서 요소를 제거할 때는 remove() 또는 discard() 메서드를 사용할 수 있습니다. 두 메서드의 차이점은, 제거하려는 요소가 집합에 없을 경우 remove()는 오류를 발생시키지만, discard()는 오류 없이 진행된다는 점입니다.

my_set = {1, 2, 3, 4}
my_set.remove(3)
print(my_set)  # 출력: {1, 2, 4}

my_set.discard(5)  # 요소 5는 집합에 없지만 오류 없음
print(my_set)  # 출력: {1, 2, 4}

3.3 요소 모두 제거하기 (clear() 메서드)

집합의 모든 요소를 제거하려면 clear() 메서드를 사용합니다.

my_set = {1, 2, 3}
my_set.clear()
print(my_set)  # 출력: set()

4. 집합 연산

집합은 수학적 집합 연산인 합집합, 교집합, 차집합, 대칭 차집합을 지원합니다.

4.1 합집합 (union() 또는 | 연산자)

두 집합의 합집합은 두 집합의 모든 요소를 포함하는 새로운 집합을 만듭니다.

set_a = {1, 2, 3}
set_b = {3, 4, 5}
union_set = set_a.union(set_b)
print(union_set)  # 출력: {1, 2, 3, 4, 5}

# 또는
union_set = set_a | set_b
print(union_set)  # 출력: {1, 2, 3, 4, 5}

4.2 교집합 (intersection() 또는 & 연산자)

두 집합의 교집합은 공통된 요소들로 이루어진 새로운 집합입니다.

set_a = {1, 2, 3}
set_b = {3, 4, 5}
intersection_set = set_a.intersection(set_b)
print(intersection_set)  # 출력: {3}

# 또는
intersection_set = set_a & set_b
print(intersection_set)  # 출력: {3}

4.3 차집합 (difference() 또는 - 연산자)

차집합은 첫 번째 집합에서 두 번째 집합에 있는 요소를 제거한 새로운 집합입니다.

set_a = {1, 2, 3}
set_b = {3, 4, 5}
difference_set = set_a.difference(set_b)
print(difference_set)  # 출력: {1, 2}

# 또는
difference_set = set_a - set_b
print(difference_set)  # 출력: {1, 2}

4.4 대칭 차집합 (symmetric_difference() 또는 ^ 연산자)

대칭 차집합은 두 집합에 공통으로 존재하지 않는 요소들로 이루어진 새로운 집합입니다.

set_a = {1, 2, 3}
set_b = {3, 4, 5}
symmetric_diff_set = set_a.symmetric_difference(set_b)
print(symmetric_diff_set)  # 출력: {1, 2, 4, 5}

# 또는
symmetric_diff_set = set_a ^ set_b
print(symmetric_diff_set)  # 출력: {1, 2, 4, 5}

5. 집합의 기타 메서드들

집합에는 이 외에도 다양한 메서드들이 존재합니다.

5.1 부분집합 여부 확인 (issubset())

집합 A가 집합 B의 부분집합인지 확인하려면 issubset() 메서드를 사용합니다.

set_a = {1, 2}
set_b = {1, 2, 3, 4}
print(set_a.issubset(set_b))  # 출력: True

5.2 상위집합 여부 확인 (issuperset())

집합 A가 집합 B를 포함하는 상위집합인지 확인하려면 issuperset() 메서드를 사용합니다.

set_a = {1, 2, 3, 4}
set_b = {2, 3}
print(set_a.issuperset(set_b))  # 출력: True

5.3 요소 존재 여부 확인 (in 연산자)

집합에서 특정 요소의 존재 여부를 확인할 때는 in 연산자를 사용합니다.

my_set = {1, 2, 3, 4}
print(3 in my_set)  # 출력: True
print(5 in my_set)  # 출력: False

6. 정리

오늘은 파이썬의 집합(Set) 자료형에 대해 알아보았습니다. 집합은 중복을 허용하지 않고 순서가 없다는 특징 덕분에, 데이터의 중복을 제거하거나 특정 요소의 존재 여부를 빠르게 확인할 때 유용하게 사용됩니다. 다양한 집합 연산을 통해 데이터를 효율적으로 처리할 수 있는 방법도 소개해드렸습니다.

반응형