파이썬 자료형 (집합)

윤태영·2023년 11월 7일
0
post-thumbnail

이미지 출처: https://wikidocs.net/192339

오늘은 마지막으로 파이썬 자료형 집합을 알아보겠습니다.

집합 사용법

  • 집합 선언
  • 집합 특징
  • 집합 추가
  • 집합 관련 함수

파이썬에서 집합(Set)은 고유한 요소들의 모임으로, 순서가 없고 중복된 요소를 포함하지 않는 데이터 구조입니다. 집합은 수학적 집합의 개념을 반영하여, 요소의 중복을 허용하지 않고, 다양한 집합 연산을 지원합니다.

집합 선언 📕

  • 집합(Set) 자료형 (순서x 중복x, 수정O, 삭제O)
a = set()
b = set([1, 2, 3, 4])# set 안에 원소를 리스트 형태로 넣어준다.
c = set([1, 4, 5, 6])
d = set([1, 2, 'Pen', 'Cap', 'Plate'])
e = {"foo", 'bar', 'baz', 'foo', 'qux'} # key가 없다면 set이다.
f = {42, 'foo', (1, 2, 3), 3.141592} # 서로다른 자료형도 들어갈 수 있다.
print('a - ', type(a), a, 2 in a)
>>> a -  <class 'set'> set() False
print('b- ' , type(b), b)
>>> b-  <class 'set'> {1, 2, 3, 4}
print('c - ', type(c), c)
>>> c -  <class 'set'> {1, 4, 5, 6}
print('d - ', type(d), d)
>>> d -  <class 'set'> {1, 2, 'Pen', 'Cap', 'Plate'}
print('e - ', type(e), e)
>>> e -  <class 'set'> {'bar', 'foo', 'baz', 'qux'}
print('f - ', type(f), f) 
>>> <class 'set'> {42, 3.141592, 'foo', (1, 2, 3)}
---------------------------------------------------------------------
# 튜플 변환(set -> tuple)
t = tuple(b)
print('t - ', type(t), t)
>>> t -  <class 'tuple'> (1, 2, 3, 4)
print('t - ', t[0], t[1:3])
>>> t -  1 (2, 3)
---------------------------------------------------------------------
# 리스트 변환(set -> list)
l = list(c)
>>> l -  [1, 4, 5, 6]
l2 = list(e)
>>> l2 -  ['foo', 'bar', 'baz', 'qux']
---------------------------------------------------------------------
# 길이
print(len(a))
>>> 0
print(len(b))
>>> 4
print(len(c))
>>> 4
print(len(d))
>>> 5
print(len(e)) # 중복안되기에 길이가 4가 나온다.
>>> 4
print(len(f))
>>> 4

집합 자료형 활용 📕

집합 자료형은 파이썬에서 다양한 상황에서 유용하게 활용될 수 있습니다. 주요 활용 사례로는 중복 제거, 데이터 집합 간의 관계 파악, 집합 연산 수행 등이 있습니다.

교집합 (Intersection)
교집합은 두 집합에 공통으로 포함된 요소들의 집합입니다. 즉, 두 집합 모두에 속하는 요소들로 구성된 집합입니다.

  • &
  • intersection

합집합 (Union)
합집합은 두 집합의 모든 요소를 포함하는 집합입니다. 여기서 중복되는 요소는 하나로 취급됩니다. 즉, 두 집합 중 어느 한쪽이라도 포함하는 모든 요소들로 구성된 집합입니다.

  • |
  • union

차집합(Difference)
차집합은 집합 이론에서 두 집합 간의 관계를 나타내는 연산 중 하나입니다. 집합 A와 집합 B가 있을 때, A의 차집합 B(A - B)는 A에는 속하지만 B에는 속하지 않는 모든 요소들의 집합입니다. 즉, A에서 B에 속하는 요소들을 제외한 나머지 요소들로 구성된 집합을 의미합니다.

  • -
  • difference
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
# &은 교집합, 집합의 교집합은 집합을 출력하기에, 원하면 리스트나 튜플로 형변환하자.
print('s1 & s2', s1 & s2) 
>>> s1 & s2 {4, 5, 6}
# 위와 같은결과
print('s1 & s2', s1.intersection(s2)) 
>>> s1 & s2 {4, 5, 6}
# | 은 합집합
print('s1 | s2', s1 | s2) 
>>> s1 | s2 {1, 2, 3, 4, 5, 6, 7, 8, 9}
print('s1 | s2', s1.union(s2))
>>> s1 | s2 {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 차집합
print('s1 - s2', s1 - s2)
>>> s1 - s2 {1, 2, 3}
print('s1 - s2', s1.difference(s2))
>>> s1 - s2 {1, 2, 3}

중복원소 & 부분 집합 확인 📕

  • isdisjoint() : 두 집합이 교집합이 없는지, 즉 공통된 요소가 전혀 없는지 확인합니다. 공통 요소가 없으면 True를, 있으면 False를 반환합니다.

  • issubset() : 한 집합이 다른 집합의 부분집합인지 확인합니다. s1이 s2의 부분집합이라면 s1의 모든 요소가 s2에 포함되어야 하며, 이 경우 True를 반환합니다.

  • issuperset() : 한 집합이 다른 집합을 포함하는지 확인합니다. s1이 s2의 상위집합이라면 s2의 모든 요소가 s1에 포함되어야 하며, 이 경우 True를 반환합니다.

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print('s1 & s2 : ', s1.isdisjoint(s2)) # 교집합이 있으면 False
>>> s1 & s2 :  False
---------------------------------------------------------------------
# 부분 집합 확인
print('subset : ', s1.issubset(s2)) # s1이 s2의 부분집합인가?
>>> subset :  False
print('superset : ', s1.issuperset(s2)) # s1집합이 s2를 포함하는 집합인가?
>>> superset :  False

추가 & 삭제 📕

  • add : 집합(Set)에서 add 함수는 집합에 새로운 요소를 추가하는 데 사용됩니다.
  • discard : 지정된 요소를 집합에서 제거하는 데 사용됩니다.
  • remove : discard와 같이 지정된 요소를 집합에서 제거하는 데 사용되지만, 없는 원소를 제거하려고 하면 오류가 발생한다.
  • clear : 집합의 모든 요소를 제거하고 빈 집합을 만드는 데 사용됩니다.(리스트도 사용가능)
s1 = set([1, 2, 3, 4])
s1.add(5)
>>> s1 -  {1, 2, 3, 4, 5}
s1.remove(7) # 없는 원소를 지우려고 하면 에러
>>> KeyError: 7
s1.remove(2)
print('s1 - ', s1)
>>> s1 -  {1, 3, 4, 5}
s1.discard(3)
print('s1 - ', s1)
>>> s1 -  {1, 4, 5}
# 집합 안의 모든 원소를 제거
s1.clear()   
print('s1 - ', s1)
>>> s1 -  set()
# 리스트도 가능
a = [1, 2, 3]
a.clear()
print(a)
>>> []

집합을 마지막으로 파이썬의 모든 자료구조형을 살펴보았다. 다음에는 파이썬의 흐름을 제어하는 if구문을 알아보자. 😊

출처 : 인프런

profile
ice blue

0개의 댓글