세트란?
세트는 집합으로 집합 연산이 가능하고 요소 간의 중복을 허용하지 않아 중복 제거 용도로도 사용된다.
딕셔너리와 같이 인덱스 번호가 없어 인덱싱과 슬라이싱이 불가능하다.
세트의 기본 사용
먼저 빈 세트를 만들어보자.
딕셔너리와 똑같이 세트도 중괄호를 사용하며 빈 세트를 만들 시 중괄호로 만들면 딕셔너리가 생성되는 것만 조심하자.
# 빈 세트 만들기
se1 = {} # 잘못된 예 => 딕셔너리가 생성됨
se2 = set() # 올바른 예
print(se1, type(se1))
print(se2, type(se2))
{} <class 'dict'>
set() <class 'set'>
다음으로는 세트에 요소들을 넣어보자.
세트는 요소 간의 중복을 허용하지 않기 때문에 중복되는 요소는 삭제된다.
# 세트 만들기
se = {1, 1, 2, 3, 4, 5}
print(se)
{1, 2, 3, 4, 5} # 중복된 1이 사라짐
세트에 사용되는 함수들
일단 다른 자료형과 마찬가지로 추가, 제거 함수가 있고 집합 연산 함수들이 존재한다.
1. 세트 추가 함수
세트는 add함수와 update함수를 통해 요소를 추가할 수 있다.
# add로 요소 추가하기
se = {1, 2, 3, 4, 5}
se.add(6)
print(se)
{1, 2, 3, 4, 5, 6}
update함수를 사용할 때는 리스트 형태로 추가할 요소들을 넣어준다.
se = {1, 2, 3, 4, 5}
se.update([6, 7])
print(se)
{1, 2, 3, 4, 5, 6, 7}
2. 세트 삭제 함수
첫 번째는 삭제 함수는 remove함수이다.
remove함수는 원하는 값을 넣으면 삭제되며 없는 값을 삭제하려고 할 시 에러가 발생한다.
# remove로 요소 삭제
se = {1, 2, 3, 4, 5}
se.remove(3)
print(se)
{1, 2, 4, 5}
# remove로 없는 값 삭제
se = {1, 2, 3, 4, 5}
se.remove(6)
print(se)
KeyError: 6
다음으로는 discard함수인데 remove함수와는 다르게 없는 값을 삭제하려고 해도 에러가 발생하지 않는다.
# discard로 요소 삭제
se = {1, 2, 3, 4, 5}
se.discard(3)
print(se)
{1, 2, 4, 5}
# discard로 없는 값 삭제
se = {1, 2, 3, 4, 5}
se.discard(6)
print(se)
{1, 2, 3, 4, 5}
다음은 pop 함수이고 세트의 경우 인덱스 번호가 부여되지 않아 순서가 없기 때문에 랜덤한 요소가 삭제된다.
또한 비어있는 세트에 사용할 시 에러가 발생한다.
# pop으로 요소 삭제 => 랜덤한 요소 삭제
se = {1, 2, 3, 4, 5}
se.pop()
print(se)
{2, 3, 4, 5}
# 비어있는 세트에 pop사용
se = set()
se.pop()
print(se)
KeyError: 'pop from an empty set'
다음으로는 clear함수이며 모든 요소를 삭제한다.
# clear로 모든 요소 삭제
se = {1, 2, 3, 4, 5}
se.clear()
print(se)
set()
3. 집합 연산 함수
세트는 집합 연산을 지원하며 아래는 집합 연산 함수의 예제들이다.
먼저 두 개 이상의 집합에 속하는 모든 원소를 모은 집합인 합집합에 대해 알아본다.
만약 합집합을 모른다면 쉬운 개념이니 아래 링크를 통해 배워보자.
https://ko.wikipedia.org/wiki/%ED%95%A9%EC%A7%91%ED%95%A9
합집합 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 집합 A와 B의 합집합 A ∪ B. A와 B를 각각 두 원으로 나타낼 때, A ∪ B는 두 원을 합쳐 만든 큰 모양이다. 집합론에서 둘 또는 더 많은 집합의 합집합(合集合, 영어
ko.wikipedia.org
합집합은 union함수와 |을 통해서 구할 수 있다.
# union함수와 |를 통한 합집합 구기기
se1 = {1, 2, 3, 4, 5}
se2 = {6, 7, 8, 9, 10}
se3 = se1.union(se2)
se4 = se1 | se2
print(se3)
print(se4)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
다음은 교집합인데 두 개 이상의 집합에 속하는 원소중 서로 겹치는 원소를 모은 집합을 교집합이라고 한다.
교집합에 대한 설명이 있는 링크도 걸어두겠다.
https://ko.wikipedia.org/wiki/%EA%B5%90%EC%A7%91%ED%95%A9
교집합 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 집합 A와 B의 교집합을 표현한 벤 다이어그램 집합론에서, 두 집합 A와 B의 교집합(交集合, 영어: intersection) A ∩ B는 그 두 집합이 공통으로 포함하는 원소로 이
ko.wikipedia.org
교집합은 intersection함수 또는 &을 통해서 구해줄 수 있다.
# intersection함수와 &를 통한 교집합 구기기
se1 = {1, 2, 3, 4, 5}
se2 = {3, 4, 5, 6, 7}
se3 = se1.intersection(se2)
se4 = se1 & se2
print(se3)
print(se4)
{3, 4, 5}
{3, 4, 5}
다음은 차집합으로 A와 B라는 집합이 있을 때 B에 대한 A의 차집합은 B의 원소 중 A와 겹치는 원소는 제외한 B의 원소를 뜻한다.
https://ko.wikipedia.org/wiki/%EC%97%AC%EC%A7%91%ED%95%A9#%EC%B0%A8%EC%A7%91%ED%95%A9
여집합 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 집합론에서, 집합 A의 여집합(餘集合, 또는 보집합(補集合), complement set) AC는, 전체집합 U의 원소 중 A의 원소가 아닌 것들의 집합이다. 집합 B에 대한 A의 차집합(
ko.wikipedia.org
차집합은 difference함수 또는 -기호를 통해 구할 수 있다.
# difference함수와 -를 통한 차집합 구기기
se1 = {1, 2, 3, 4, 5}
se2 = {3, 4, 5, 6, 7}
se3 = se1.difference(se2)
se4 = se1 - se2
print(se3)
print(se4)
{1, 2}
{1, 2}
마지막으로 대칭차집합을 구하는 방법이다.
대칭차집합은 두 집합에서 겹치는 원소를 제외한 나머지 원소를 모은 집합을 말한다.
https://ko.wikipedia.org/wiki/%EB%8C%80%EC%B9%AD%EC%B0%A8
대칭차 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 벤 다이어그램으로 표현한 대칭차 A △ B {\displaystyle A\bigtriangleup B} 집합론에서, 두 집합의 대칭차(對稱差, 영어: symmetric difference) 또는 대칭차집합(對稱差集合)
ko.wikipedia.org
symmetric_difference함수 또는 ^기호를 통해 구할 수 있다.
# symmetric_difference()함수와 ^를 통한 대칭차집합 구기기
se1 = {1, 2, 3, 4, 5}
se2 = {3, 4, 5, 6, 7}
se3 = se1.symmetric_difference(se2)
se4 = se1 ^ se2
print(se3)
print(se4)
{1, 2, 6, 7}
{1, 2, 6, 7}
두 집합에 대해 겹치는 원소가 없는지 확인할 수 있는 isdisjoint함수도 있다.
# isdisjoint로 겹치는 원소가 없는지 알아기기
se1 = {1, 2, 3}
se2 = {3, 4, 5}
se3 = {4, 5, 6}
print(se1.isdisjoint(se2)) # 겹치는 원소가 있으면 False
print(se1.isdisjoint(se3)) # 겹치는 원소가 없으면 True
False
True
A가 B의 부분집합 또는 상위집합인지 알아보는 issubset함수와 issuperset함수에 대해 알아본다.
# 부분집합 알아기기
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a.issubset(b)) # True이면 a가 b의 부분집합, 아니면 False
print(a <= b) # 비교연산자를 통해서도 확인 가능하다.
# 상위집합 알아보기
a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
print(a.issuperset(b)) # True이면 a가 b의 상위집합, 아니면 False
print(b <= a) # 비교연산자를 통해서도 확인 가능하다.
True
True
True
True
세트로 중복 제거하기
세트는 중복을 허용하지 않는 자료형으로 중복 제거를 할 때 사용하기도 한다.
세트의 중복 제거는 간단하니 간단한 예제만 보고 넘어가도록 하자.
# 세트로 중복 제거하기
li = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
se = set(li)
print(se)
{1, 2, 3, 4, 5}
결론
사실 학교에서 파이썬을 배우면서 세트를 사용한 적은 그리 많지 않다.
하지만 세트도 어딘가에서는 쓰이고 많이 쓰지 않는만큼 사용할 때 기억이 나지 않을 수도 있다.
세트가 집합 연산이 가능하고 중복 제거가 가능하다는 것은 꼭 기억하자.
'Python > Foundation' 카테고리의 다른 글
10강. [Python]반복문 (0) | 2025.02.02 |
---|---|
09강. [Python]조건문 (0) | 2025.02.02 |
07강. [Python]딕셔너리 (0) | 2025.02.01 |
06강. [Python]튜플 (0) | 2025.02.01 |
05강. [Python]리스트 (0) | 2025.02.01 |