티스토리 뷰
목차
프로그래밍을 하면서 데이터를 다루는 일은 피할 수 없습니다. 특히, 중복되지 않는 고유한 값들의 모음을 다룰 때 Python의 집합(Set) 자료형은 아주 유용합니다. 개인적으로도 처음엔 단순한 리스트와 딕셔너리로 대부분의 작업을 해결하려 했지만, 데이터를 고유하게 관리하고 교집합, 합집합 같은 수학적 연산을 빠르게 처리해야 할 때 Set의 강력함을 실감했습니다. Python을 이제 막 배우기 시작한 분들도 집합을 제대로 이해하고 활용하면 데이터를 다루는 능력이 한층 더 향상될 수 있습니다. 부담 갖지 마시고 하나씩 차근차근 따라와 보세요.
1. 집합(Set) 개념 이해하기
Python의 집합(Set)은 중복을 허용하지 않고, 순서가 없는 데이터 구조입니다. 수학의 집합과 유사한 기능을 제공하며, 교집합, 합집합, 차집합 등의 다양한 집합 연산을 지원합니다.
1.1 집합의 기본 특징
- 중복을 허용하지 않음: 집합에는 동일한 요소를 중복하여 추가할 수 없습니다.
- 순서가 없음: 리스트와 달리 집합은 요소의 순서를 보장하지 않습니다.
- 변경 가능: 집합은 요소를 추가하거나 삭제할 수 있습니다.
예시:
# 집합 선언
my_set = {1, 2, 3, 4, 5}
print(my_set) # 출력: {1, 2, 3, 4, 5}
1.2 집합의 정의 방법
집합은 중괄호 {}를 사용하여 정의하거나, set() 함수를 사용하여 정의할 수 있습니다.
# 중괄호를 사용한 집합
fruits = {"apple", "banana", "cherry"}
# set() 함수를 사용한 집합
numbers = set([1, 2, 3, 4, 5])
print(fruits) # 출력: {'apple', 'banana', 'cherry'}
print(numbers) # 출력: {1, 2, 3, 4, 5}
중괄호를 사용해 정의할 때는 중복된 값이 자동으로 제거됩니다.
2. 집합(Set) 조작하기
집합은 데이터를 관리할 때 여러 유용한 메서드를 제공합니다. 데이터를 추가, 삭제, 수정할 수 있으며, 다양한 집합 연산도 쉽게 수행할 수 있습니다.
2.1 집합에 요소 추가하기
집합에 요소를 추가할 때는 add() 메서드를 사용합니다. 이미 존재하는 요소를 추가하려고 하면 아무런 변화가 없습니다.
fruits = {"apple", "banana"}
fruits.add("cherry")
print(fruits) # 출력: {'apple', 'banana', 'cherry'}
# 이미 존재하는 요소 추가 시
fruits.add("apple")
print(fruits) # 출력: {'apple', 'banana', 'cherry'}
2.2 집합에 여러 요소 추가하기
여러 요소를 한꺼번에 추가하려면 update() 메서드를 사용합니다.
fruits = {"apple", "banana"}
fruits.update(["cherry", "orange"])
print(fruits) # 출력: {'apple', 'banana', 'cherry', 'orange'}
update() 메서드는 반복 가능한 객체(리스트, 튜플 등)를 인자로 받아 집합에 요소를 추가합니다.
2.3 집합에서 요소 삭제하기
- remove(item): 특정 요소를 삭제합니다. 요소가 존재하지 않으면 KeyError가 발생합니다.
- discard(item): 특정 요소를 삭제하지만, 요소가 존재하지 않아도 오류가 발생하지 않습니다.
fruits = {"apple", "banana", "cherry"}
fruits.remove("banana")
print(fruits) # 출력: {'apple', 'cherry'}
fruits.discard("orange") # 오류 발생 없음
3. 집합(Set) 연산
Python의 집합은 수학에서의 집합처럼 다양한 연산을 지원합니다. 교집합, 합집합, 차집합 등의 연산을 통해 데이터를 효율적으로 처리할 수 있습니다.
3.1 교집합(intersection)
두 집합의 공통 요소를 찾으려면 intersection() 메서드를 사용하거나 & 연산자를 사용할 수 있습니다.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 교집합 찾기
intersection = set1.intersection(set2)
print(intersection) # 출력: {3, 4}
# & 연산자 사용
print(set1 & set2) # 출력: {3, 4}
3.2 합집합(union)
두 집합의 모든 요소를 결합하려면 union() 메서드를 사용하거나 | 연산자를 사용할 수 있습니다.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 합집합 찾기
union_set = set1.union(set2)
print(union_set) # 출력: {1, 2, 3, 4, 5, 6}
# | 연산자 사용
print(set1 | set2) # 출력: {1, 2, 3, 4, 5, 6}
3.3 차집합(difference)
한 집합에서 다른 집합의 요소를 제외하려면 difference() 메서드를 사용하거나 - 연산자를 사용할 수 있습니다.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 차집합 찾기
difference = set1.difference(set2)
print(difference) # 출력: {1, 2}
# - 연산자 사용
print(set1 - set2) # 출력: {1, 2}
4. 집합(Set)의 활용 예제
집합을 사용하면 효율적으로 중복 제거, 데이터 비교 등의 작업을 수행할 수 있습니다. 몇 가지 실용적인 예제를 통해 집합의 활용을 알아보겠습니다.
4.1 중복 제거
리스트에서 중복된 값을 제거하고 고유한 값만 얻으려면 집합을 사용할 수 있습니다.
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)
print(unique_numbers) # 출력: {1, 2, 3, 4, 5}
집합은 중복을 자동으로 제거하므로, 데이터를 간편하게 정리할 수 있습니다.
4.2 데이터 비교
집합을 사용하여 두 데이터 세트에서 공통 요소를 찾거나 서로 다른 요소를 빠르게 비교할 수 있습니다.
students_a = {"Alice", "Bob", "Charlie"}
students_b = {"Charlie", "David", "Eve"}
# 공통 학생 찾기
common_students = students_a & students_b
print(common_students) # 출력: {'Charlie'}
# 한 그룹에만 있는 학생 찾기
only_a = students_a - students_b
print(only_a) # 출력: {'Alice', 'Bob'}
4.3 문자 데이터 처리
문자열의 각 문자를 집합으로 변환하여 중복을 제거하고 고유한 문자들만 얻을 수 있습니다.
word = "hello world"
unique_chars = set(word)
print(unique_chars) # 출력: {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}
요약 디스크립션
Python의 집합(Set)은 중복 없는 데이터 관리와 다양한 집합 연산을 통해 데이터를 효율적으로 처리하는 강력한 도구입니다. 이 글에서는 집합의 기본 개념부터 다양한 활용 예제까지 살펴보았습니다.