08강. [Python]세트

2025. 2. 2. 00:49·Python/Foundation

세트란?

세트는 집합으로 집합 연산이 가능하고 요소 간의 중복을 허용하지 않아 중복 제거 용도로도 사용된다.

딕셔너리와 같이 인덱스 번호가 없어 인덱싱과 슬라이싱이 불가능하다.

 

세트의 기본 사용

먼저 빈 세트를 만들어보자.

딕셔너리와 똑같이 세트도 중괄호를 사용하며 빈 세트를 만들 시 중괄호로 만들면 딕셔너리가 생성되는 것만 조심하자.

# 빈 세트 만들기
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
'Python/Foundation' 카테고리의 다른 글
  • 10강. [Python]반복문
  • 09강. [Python]조건문
  • 07강. [Python]딕셔너리
  • 06강. [Python]튜플
C0de-Log
C0de-Log
c0de-log 님의 블로그 입니다.
  • C0de-Log
    C0de-Log
    C0de-Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (18)
      • C (0)
      • Python (17)
        • Foundation (14)
        • Library (3)
      • ML (0)
      • 공모전 & 자격증 (1)
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리스트
    자료형
    tuple
    제어문
    반복문
    폴라스
    Python
    튜플
    조건문
    numpy
    코드블록
    함수
    사용자 정의 함수
    딕셔너리
    세트
    합격
    람다
    ADSP
    CLASS
    dictionary
    주석
    변수
    Pandas
    들여쓰기
    판다스
    클래스
    연산자
    lambda
    polars
    넘파이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
C0de-Log
08강. [Python]세트
상단으로

티스토리툴바