세트

2025. 7. 8. 18:01Programming 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