선언 방법
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}')

'프로그래밍 언어 > 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 |