앞선 포스팅에서 자료구조의 List와 Tuple에 대해 소개했습니다.
Python의 다양한 자료 구조 중에서도 특히 주목할 만한 것이 바로 Set(세트)입니다.
리스트와 Tuple의 특성을 이해했다면, Set에 대해 알아보는 것은 Python을 더 깊게 이해하는 데 큰 도움이 될 것입니다.
이번 포스팅에서는 Set의 정의부터 사용 방법, 그리고 유용한 연산에 이르기까지, Python에서 Set를 어떻게 활용할 수 있는지 자세히 살펴보겠습니다.
Python에서 Set(세트)란?
Set(세트)는 Python의 기본 자료 구조 중 하나로, 유일한 요소들의 집합입니다.
즉, Set 안에서는 같은 요소가 두 번 이상 나타날 수 없습니다.
이러한 성질 때문에 Set는 데이터 중복을 제거하는 데 자주 사용됩니다.
Set는 수학의 집합 개념과 매우 유사하며, 이로 인해 교집합, 합집합, 차집합과 같은 집합 연산을 쉽게 수행할 수 있습니다.
Set의 요소로는 불변 타입(immutable type)만 올 수 있으며, 가변 타입(mutable type)인 List나 Dictionary는 Set의 요소가 될 수 없습니다.
Set 사용 방법
생성
Set를 생성하기 위해서는 중괄호 {}
를 사용하거나, set()
함수를 호출할 수 있습니다.
중복된 요소는 자동으로 제거됩니다.
예제
# create set my_set = {1, 2, 3, 4, 5} print(my_set) # create set with set function my_set2 = set([1, 2, 2, 3, 4]) print(my_set2)
결과
{1, 2, 3, 4, 5} {1, 2, 3, 4}
접근
Set는 순서가 없기 때문에, 인덱스를 사용하여 직접 접근할 수 없습니다.
하지만 Set를 순회(Iterator)하거나 in
키워드를 사용하여 요소가 Set 내에 존재하는지 확인할 수 있습니다.
예제
# itorate over set for item in my_set: print(item) # check if item exists print(2 in my_set)
결과
1 2 3 4 5 True
추가/제거
세트는 요소를 추가하거나 제거할 수 있으나, 세트 내의 개별 요소를 변경할 수는 없습니다.
이는 세트의 요소가 Hash(해시)가 가능해야 하기 때문입니다.
예제
# add item to set my_set.add(6) print(my_set) # remove item from set my_set.remove(4) print(my_set)
결과
{1, 2, 3, 4, 5, 6} {1, 2, 3, 5, 6}
연산
세트는 수학적 집합 연산을 지원합니다.
예를 들어, 합집합 (|
혹은 union(set1, set2)
), 교집합(&
혹은 intersection(set1, set2)
), 차집합(-
혹은 difference(set1, set2)
) 등의 연산을 각 키워드를 통해 할 수 있습니다.
예제
# set operations set1 = {1, 2, 3} set2 = {3, 4, 5} # union print(set1 | set2) # intersection print(set1 & set2) # difference print(set1 - set2)
결과
{1, 2, 3, 4, 5} {3} {1, 2}
그 외 유용한 Set(세트) 내장 함수들
앞서 소개한 함수들 외의 몇 가지 유용한 내장 함수들을 소개합니다.
- discard(element):
- Set에서 특정 요소를 제거합니다.
- 이 메소드는
remove()
와 유사하지만, Set에 없는 요소를 제거해도 에러가 발생하지 않습니다. - 예제 코드:
my_set.discard(99)
- pop():
- 하나의 요소를 무작위로 제거하고 해당 요소를 반환합니다.
- 예제 코드:
my_set.pop()
- clear():
- 모든 요소를 제거합니다.
- 예제 코드:
my_set.clear()
- update(set1, set2):
- 예제 코드:
my_set.update([7,8])
- 예제 코드:
참고 문헌
- “Think Python: How to Think Like a Computer Scientist”
- My Git Repository (devitworld-python-basic) – 7_set.ipynb