2025. 7. 8. 18:01ㆍProgramming Language/Python
파이썬에서 세트(set)는 집합을 표현하는 자료형으로 수학에서의 집합과 거의 동일한 성격, 중복이 없고, 순서가 없다는 특징을 가진다.
자바의 Set와 C++에서의 set과 자바스크립트의 Set과 유사하다.
세트의 생성과 특징
세트는 딕셔너리랑 동일하게 {}중괄호를 사용해서 생성한다.
다만 딕셔너리와는 다르게 key:value 쌍이 아닌 리스트와 비슷한 그냥 값만으로 생성한다.
s = {1, 2, 3}
print(s) # {1, 2, 3}
print(type(s)) # <class 'set'>
또한 set()이라는 메서드를 통해서도 생성이 가능한데 이때는 리터러블한 객체(리스트, 튜플, 딕셔너리(key만), 문자열, range 등)를 전달해줘야 생성이 가능하다.
# 리스트를 set로
sList = set([1, 2, 3])
print(sList) # {1, 2, 3}
print(type(sList)) # <class 'set'>
# 딕셔너리를 set로(key로만 생성됨)
sDict = set({"name":"kim", "age": 25})
print(sDict) # {'age', 'name'}
print(type(sDict)) # <class 'set'>
# 문자열을 set로
sString = set("Set")
print(sString) # {'e', 't', 'S'}
print(type(sString)) # <class 'set'>
또한 빈 세트를 만들때는 {}중괄호로 만들 수 없고(빈 딕셔너리로 생성되기 때문) 무조건 set()함수를 사용해서 만들어야한다
emptySet = set()
print(emptySet) # set()
print(type(emptySet)) # <class 'set'>
emptydict = {}
print(emptydict) # {}
print(type(emptydict)) # <class 'dict'>
또한 세트의 경우는 값이 중복될 경우 중복을 제거한다
s = { 1, 2, 3, 4, 3, 4, 5, 1, 2, 3}
print(s) # {1, 2, 3, 4, 5}
세트의 주요 메서드
1. add(value) : 세트에 마지막에 값을 추가
s = { 1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}
2. remove(value) : 세트의 값 삭제(해당 값이 존재하지 않는다면 에러를 발생시킨다)
s = { 1, 2, 3}
# 존재하는 값 제거
s.remove(3)
print(s) # 정상 제거 - {1, 2}
# 존재하지 않는 값 제거 시도
s.remove(4)
print(s)
# 오류 발생
# Traceback (most recent call last):
# File "D:\pythonPrac\pythonProject1\test.py", line 2, in <module>
# s.remove(4)
# KeyError: 4
3. discard(value) : 세트의 값을 삭제(해당 값이 존재하지 않더라도 에러를 발생시키지 않음)
s = { 1, 2, 3}
# 존재하는 값 제거
s.discard(3)
print(s) # {1, 2}
# 존재하지 않는 값 제거
s.discard(4) # 에러가 발생하지 않음
print(s) # {1, 2}
4. clear() : 세트의 값을 전부 삭제한다.
s = { 1, 2, 3}
s.clear()
print(s) # set()
5. len() : 세트의 원소 개수를 반환한다.
s = { 1, 2, 3}
print(len(s)) # 3
집합 연산
파이썬의 세트의 경우는 집합 연산자들 지원한다.
집합 연산은 수학에서의 합집합, 교집합, 차집합, 대칭 차집합, 부분 집합 / 상위집합 관계에 해당한다.
1. 합집합 : | or set1.union(set2)
연산자 | 와 union()함수를 통해서 세트간의 합집합을 구할 수 있다.
합집합은 두개의 집합이 합쳐진 값들의 집합으로 세트끼리의 값의 합을 세트로 반환한다(값은 중복되지 않음)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print(s1 | s2) # {1, 2, 3, 4, 5}
print(s1.union(s2)) # {1, 2, 3, 4, 5}
2. 교집합 : & or set1.intersection(set2)
연산자 & 와 intersection() 함수를 통해서 세트간 교집합을 구할 수 있다.
교집합은 두 개의 집합에서 중복되는 값들의 집합을 의미하며 세트끼리 중복되는 값을 세트로 반환한다
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1 & s2) # {3, 4}
print(s1.intersection(s2)) # {3, 4}
3. 차집합 : - or set1.difference(set2)
연산자 -와 difference() 함수를 통해서 세트간 차집합을 구할 수 있다.
차집합은 메인이 되는 집합과 차집합 관계를 맺는 집합이 겹치는 값을 제거한 집합으로 세트간 중복되는 값을 제거한 값을 세트로 반환한다.
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1 - s2) # {1, 2}
print(s1.difference(s2)) # {1, 2}
4. 대칭차집합: ^ or symmetric_difference()
연산자 ^와 symmetric_difference() 함수를 통해서 대칭 차집합을 구할 수 있다.
대칭차집합이란 두개의 집합에서 중복되는 값을 제거한 합집합을 의미하고 세트간 중복되는 값만을 제거한 세트를 반환한다.
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1 ^ s2) # {1, 2, 5, 6}
print(s1.symmetric_difference(s2)) # {1, 2, 5, 6}
5. 부분집합 / 상위 집합 관계 확인 : <= or set1.issubset(set2) / >= or set1.issuperset(set2)
관계를 확인할 수 있는 연산자와 함수로 아래와 같이 각 연산자 or 함수로 확인할 수 있다.
- 부분 집합 관계 확인: <= or set1.issubset(set2)
s1 = {1, 2, 3, 4}
s2 = {2, 3}
print(s1.issubset(s2)); # False s1은 s2의 부분집합이 아님
print(s2.issubset(s1)); # True s2는 s1의 부분집합임
- 상위 집합 관계 확인: >= or set1.issuperset(set2)
s1 = {1, 2, 3, 4}
s2 = {2, 3}
print(s1.issuperset(s2)); # True s1은 s2의 상위집합임
print(s2.issuperset(s1)); # False s2는 s1의 상위집합이 아님
'Programming Language > Python' 카테고리의 다른 글
파일 입출력 (0) | 2025.07.10 |
---|---|
튜플 (0) | 2025.07.08 |
딕셔너리 (0) | 2025.07.08 |
리스트 (0) | 2025.07.08 |
Windows에서 pyenv 사용하기 (2) | 2024.11.28 |