ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1118)
    • 개인 프로젝트 (2)
      • Unity (2)
      • Unreal (0)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (191)
      • Unreal (69)
      • Unity (111)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (242)
      • 공통 (21)
      • 네트워크 (45)
      • OS & 하드웨어 (60)
      • 자료구조 & 알고리즘 (99)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (377)
      • C++ (168)
      • C# (97)
      • Java (11)
      • Python (36)
      • SQL (44)
      • JavaScript (9)
      • React (7)
    • 그 외 (15)
      • Math (7)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 클래스
  • 그래픽스
  • string
  • 파이썬
  • 포인터
  • 언리얼
  • 티스토리챌린지
  • 오블완
  • 알고리즘
  • 배열
  • C++
  • C
  • SQL
  • 백준
  • 유니티
  • python
  • 문자열
  • c#
  • Unity
  • 함수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[Python] set 집합 자료형 정리 및 예제
프로그래밍 언어/Python

[Python] set 집합 자료형 정리 및 예제

2025. 7. 11. 13:58

선언 방법

s1 = set({1,2,3})
s2 = set([1,2,3])
s3 = {1,2,3}

 

세개 다 같은 집합을 만든다, 비어있는 집합을 만들기 위해서는

s4 = set()

특징

- set() 키워드 혹은 중괄호 이용

- 순서가 없다

- 고유한 값을 가진다. (값 중복 불가능)

- mutable(=값이 변하는) 객체다

* 순서가 없기 때문에 리스트나 튜플에서 사용했던 인덱싱이 불가

교집합, 합집합, 차집합, 같거나 다른지

교집합

intersection 메서드 또는 & 연산자를 통해 구할 수 있다.

s1 = set([1,2,3,4,5])
s2 = set([4,5,6,7,8])

print(s1.intersection(s2))
print(s1 & s2)

// 결과
{4, 5}
{4, 5}

 

합집합

union 메서드 또는 | 연산자를 통해 구할 수 있다.  

s1 = set([1,2,3,4,5])
s2 = set([4,5,6,7,8])

print(s1.union(s2))
print(s1 | s2)

# 결과
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8}

 

차집합

순서가 바뀌어도 상관이 없는 교집합, 합집합과 달리 차집합은 순서가 상관이 있다.

difference 메서드 또는 - 연산자를 통해 구할 수 있다.

s1 = set([1,2,3,4,5])
s2 = set([4,5,6,7,8])

print(s1.difference(s2))
print(s2.difference(s1))

print(s1 - s2)
print(s2 - s1)

# 결과
{1, 2, 3}
{8, 6, 7}
{1, 2, 3}
{8, 6, 7}

 

집합이 같은지

s1 = set([1,2,3,4,5])
s2 = set([4,5,6,7,8])

if s1 == s2:
    print("서로 같음")

else:
    print("서로 다름")

 

집합이 아예 다른지

if s1.isdisjoint(s2):
    print("서로 같은 요소가 하나도 없음")

else:
    print("서로 같은 요소가 적어도 하나는 있음")

 

부분집합을 구하기 위해서는 issubset 메서드

대칭 차집합을 구하기 위해서는 symmetric_difference 메서드 혹은 ^ 연산자

set 관련 함수들

add - 요소 추가

중복 값을 넣어도 무시된다. 이는 집합의 특징인 "중복 제거"에 의해 만들어진 결과이며, 중복된 값을 넣어도 오류가 발생하지 않는다.

s = {1,2,3}
print(f'set : {s}')

s.add('a')
print(f'set : {s}')

s.add('a') # 중복값
print(f'set : {s}')

s.add(4)
print(f'set : {s}')

# 결과
set : {1, 2, 3}
set : {1, 2, 3, 'a'}
set : {1, 2, 3, 'a'}
set : {1, 2, 3, 4, 'a'}

 

update - 요소 여러개 추가

자세히 보면 요소를 추가할 때 리스트를 뜻하는 대괄호[] 혹은 집합 자료형을 뜻하는 중괄호{}를 이용한다

s = {1, 2, 3}
print(f'set : {s}')

s.update({'a', 'b', 'c'})
print(f'set : {s}')

s.update([11, 12, 13])
print(f'set : {s}')

# 결과
set : {1, 2, 3}
set : {1, 2, 3, 'a', 'c', 'b'}
set : {1, 2, 3, 11, 12, 13, 'b', 'a', 'c'}

 

remove - 특정 요소 제거

지우려는 요소가 집합 안에 없는 경우에는 에러가 발생한다

s = {'kim', 'lee', 'park', 2, 3, 4}
print(f'집합 {s}')

s.remove("kim")
print(f'집합 {s}')

# 결과
집합 {2, 3, 4, 'park', 'lee', 'kim'}
집합 {2, 3, 4, 'park', 'lee'}

 

discard - 특정 요소 안전하게 제거

집합 내부에 값이 있으면 삭제, 없으면 오류

s = {'kim', 'lee', 'park', 2, 3, 4}
print(f'집합 {s}')

s.remove("lee")
print(f'집합 {s}')

s.remove("lee")
print(f'집합 {s}')

# 결과
집합 {2, 3, 4, 'lee', 'park', 'kim'}
집합 {2, 3, 4, 'park', 'kim'}
Traceback (most recent call last):
  File "e:\Personal\Python\TestProj\Main.py", line 16, in <module>
    s.remove("lee")
KeyError: 'lee'

 

pop - 임의의 요소를 갖고 온 후 제거

len 함수를 사용해서 집합이 비어있는지 확인한 후에 하는게 안전하다

s = {'r', 'a', 'n', 'd', 'o', 'm'}
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

# 이미 비어있는 집합이므로 pop 불가, 에러 발생

print(f'집합.pop() : {s.pop()}')
print(f'집합 : {s}')

 

출처) https://blockdmask.tistory.com/451

저작자표시 (새창열림)

'프로그래밍 언어 > Python' 카테고리의 다른 글

[Python] sympy 사용해서 그래프 그리기  (0) 2025.08.04
[Python] 고차함수 (Higher Order Functions, 고계함수)  (0) 2025.07.14
[Python] None  (0) 2025.01.25
[Python] 인덱싱과 슬라이싱 : 음수 인덱스  (0) 2025.01.17
[Python] 문자열 뒤집는 3가지 방법  (0) 2024.10.23
    '프로그래밍 언어/Python' 카테고리의 다른 글
    • [Python] sympy 사용해서 그래프 그리기
    • [Python] 고차함수 (Higher Order Functions, 고계함수)
    • [Python] None
    • [Python] 인덱싱과 슬라이싱 : 음수 인덱스
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바