본문 바로가기
개발/Python

[파이썬, Python] 세트 관련 함수 총정리

by 꾀돌이 개발자 2022. 3. 15.
반응형

 

[ 파이썬 세트 관련 함수 정리 ]

 

 

* 코드는 기본적으로 <입력값 # 출력값> 으로 구성되어 있습니다.

 

* 아래 [더보기] 클릭 후 [Ctrl + F] 단축키를 활용하여 찾고 계신 함수 위치로 바로 가실 수 있습니다.

더보기

자료형 변환 : set

세트 복사 : =, set, copy
세트 내장 함수 : len
세트 내장 함수 : |, -, &, ^, <=, >=
세트 내장 함수 : union, difference, intersection, symmetric_difference, issubset, isdisjoint
세트 내장 함수 : |=, -=, &=, ^=
세트 내장 함수 : update, difference_update, intersection_update, symmetric_difference_update
세트 내장 함수 : ==, !=
세트 내장 함수 : add, update
리스트 내장 함수 : discard, remove, pop, clear
세트 내장 함수 : max, min, sum

 

 

type(변수) : 세트(set)

a, b = {0}, set()
print(type(a)) # <class 'dict'>
print(type(b)) # <class 'set'>
c = {1, 2, 3}
d = {1, 2, 'a'}
print(type(c)) # <class 'set'>
print(type(d)) # <class 'set'>
e = {}
print(type(e)) # <class 'dict'>
f = {1, 2, {1, 2, 3}} # TypeError: unhashable type: 'set'

 

 

세트 연산자 : 세트는 리스트, 튜플과 달리 요소 순서가 없기 때문에 + , * 연산자를 지원받지 않음

 

 

자료형 변환 : set

  • set(값) : 값(문자열, 리스트, 튜플 등)을 세트로 변환, 단 세트 특성에 따라 중복값은 제거되며 순서가 사라짐
a = 'aaaaabbccc'
print(type(a)) # <class 'str'>
print(set(a)) # {'c', 'a', 'b'}
print(type(set(a))) # <class 'set'>

a = [1, 2, 2, 3, 3, 3]
print(type(a)) # <class 'list'>
print(set(a)) # {1, 2, 3}
print(type(set(a))) # <class 'set'>

a = (1, 2, 2, 3, 3, 3)
print(type(a)) # <class 'tuple'>
print(set(a)) # {1, 2, 3}
print(type(set(a))) # <class 'set'>

 

 

자료형 변환 응용 : 리스트 or 튜플의 중복 요소를 제거하기 위한 set의 사용

  • list(set(리스트)) : set을 통해 리스트의 중복 요소를 제거한 뒤, list를 통해 리스트 type으로 변경함
  • tuple(set(튜플)) : set을 통해 튜플의 중복 요소를 제거한 뒤, tuple를 통해 튜플 type으로 변경함
a = [1, 1, 2, 2, 2, 3, 3, 3]
b = list(set(a))
print(b) # [1, 2, 3]
print(type(b)) # <class 'list'>

a = (1, 1, 2, 2, 2, 3, 3, 3)
b = tuple(set(a))
print(b) # (1, 2, 3)
print(type(b)) # <class 'tuple'>

 

 

세트 인덱싱 & 슬라이싱: 세트는 리스트, 튜플과 달리 요소순서가 없기 때문에 인덱싱, 슬라이싱을 지원받지 않음

 

 

세트 복사 : =, set, copy

 

  • 세트2 = 세트1 : 세트1 값을 세트2 값에 저장함, 두 변수의 메모리 주소가 동일함
  • 세트2 = set(세트1) : 세트1 값을 세트2 값에 저장함, 두 변수의 메모리 주소가 동일하지 않음
  • 세트2 = 세트1.copy() : 세트1 값을 세트2 값에 저장함, 두 변수의 메모리 주소가 동일하지 않음
a = {1, 2, 3}
b = a
print(id(a), id(b)) # 2485422013352 2485422013352
print(b is a) # True

a = {1, 2, 3}
c = set(a)
print(id(a), id(c)) # 2485418207048 2485418207272
print(c is a) # False

a = {1, 2, 3}
e = a.copy()
print(id(a), id(e)) # 2485422013800 2485418207048
print(e is a) # False

 

 

 

세트 내장 함수 : len

  • len(세트) : 세트의 길이를 반환함
a = {1, 2, 3, 4, 5}
print(len(a)) # 5

a = {1, 2, 2, 2, 3}
print(len(a)) # 3
print(a) # {1, 2, 3}

 

 

세트 내장 함수 : |, -, &, ^, <=, >=

  • 세트 | 세트 : 두 세트의 합집합 결과를 반환함
  • 세트 - 세트 : 두 세트의 차집합 결과를 반환함
  • 세트 & 세트 : 두 세트의 교집합 결과를 반환함
  • 세트 ^ 세트 : 두 세트의 대칭차집합 결과를 반환함
  • 세트1 <= 세트2 : 세트1이 세트2의 부분집합인지 여부를 확인함
  • 세트1 >= 세트2: : 세트1이 세트2의 상위집합인지 여부를 확인함
  • 위 함수는 결과값만을 제시하며 세트의 요소들은 변하지 않음
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
print(a | b) # {1, 2, 3, 4, 5, 6, 7}
print(a - b) # {1, 2}
print(b - a) # {6, 7}
print(a & b) # {3, 4, 5}
print(a ^ b) # {1, 2, 6, 7}

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a <= b) # True
print(a >= b) # False
print(b >= a) # True

 

 

세트 내장 함수 : union, difference, intersection, symmetric_difference, issubset, isdisjoint

  • 세트.union(세트) : 두 세트의 합집합 결과를 반환함
  • 세트.difference(세트) : 두 세트의 차집합 결과를 반환함
  • 세트.intersection(세트) : 두 세트의 교집합 결과를 반환함
  • 세트.symmetric_difference(세트) : 두 세트의 대칭차집합 결과를 반환함
  • 세트1.issubset(세트2) : 세트1이 세트2의 부분집합인지 여부를 확인함
  • 세트1.issuperset(세트2) : 세트1이 세트2의 상위집합인지 여부를 확인함
  • 세트.isdisjoint(세트) : 두 세트가 서로소 집합인지 여부를 확인함
  • 위 함수는 결과값만을 제시하며 세트의 요소들은 변하지 않음
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
print(a.union(b)) # {1, 2, 3, 4, 5, 6, 7}
print(b.union(a)) # {1, 2, 3, 4, 5, 6, 7}
print(a.difference(b)) # {1, 2}
print(b.difference(a)) # {6, 7}
print(a.intersection(b)) # {3, 4, 5}
print(b.intersection(a)) # {3, 4, 5}
print(a.symmetric_difference(b)) # {1, 2, 6, 7}
print(b.symmetric_difference(a)) # {1, 2, 6, 7}

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a.issubset(b)) # True
print(b.issubset(a)) # False
print(b.issuperset(a)) # True

a = {1, 2, 3}
b = {7, 8, 9}
print(a.isdisjoint(b)) # True

 

 

세트 내장 함수 : |=, -=, &=, ^=

  • 세트1 |= 세트2 : 세트1과 세트2의 합집합 연산 결과를 세트1에 저장함
  • 세트1 -= 세트2 : 세트1과 세트2의 차집합 연산 결과를 세트1에 저장함
  • 세트1 &= 세트2 : 세트1과 세트2의 교집합 연산 결과를 세트1에 저장함
  • 세트1 ^= 세트2 : 세트1과 세트2의 대칭차집합 연산 결과를 세트1에 저장함
  • 위 함수는 연산결과를 세트1에 저장함

 

 

a = {1, 2}
a |= {3, 4, 5}
print(a) # {1, 2, 3, 4, 5}

a = {1, 2, 3, 4, 5}
a -= {3, 4, 5}
print(a) # {1, 2}

a = {1, 2, 3, 4, 5}
a &= {3, 4, 5, 6, 7}
print(a) # {3, 4, 5}

a = {1, 2, 3, 4, 5}
a ^= {2, 3, 4}
print(a) # {1, 5}

 

 

세트 내장 함수 : update, difference_update, intersection_update, symmetric_difference_update

  • 세트1.update(세트2) : 세트1과 세트2의 합집합 연산 결과를 세트1에 저장함
  • 세트1.difference_update(세트2) : 세트1과 세트2의 차집합 연산 결과를 세트1에 저장함
  • 세트1.intersection_update(세트2) : 세트1과 세트2의 교집합 연산 결과를 세트1에 저장함
  • 세트1.symmetric_difference_update(세트2) : 세트1과 세트2의 대칭차집합 연산 결과를 세트1에 저장함
  • 위 함수는 연산결과를 세트1에 저장함

 

 

a = {1, 2}
a.update({3, 4, 5})
print(a) # {1, 2, 3, 4, 5}

a = {1, 2, 3, 4, 5}
a.difference_update({3, 4, 5})
print(a) # {1, 2}

a = {1, 2, 3, 4, 5}
a.intersection_update({3, 4, 5, 6, 7})
print(a) # {3, 4, 5}

a = {1, 2, 3, 4, 5}
a.symmetric_difference_update({2, 3, 4})
print(a) # {1, 5}

 

 

세트 내장 함수 : ==, !=

  • 세트1 == 세트2 : 세트1과 세트2가 동일한지 여부를 반환함
  • 세트1 != 세트2 : 세트1과 세트2가 다른지 여부를 반환함
a = {1, 2, 3}
b = {1, 2, 3}
print(a == b) # True
print(a != b) # False

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a == b) # False
print(a != b) # True

 

 

세트 내장 함수 : add, update

  • 세트.add(값) : 세트에 1개의 값을 추가함
  • 세트.update(리스트): 세트에 여러 개의 값을 추가함
a = {1, 2, 3, 4, 5}
a.add(6)
print(a) # {1, 2, 3, 4, 5, 6}
a.add(6, 7, 9) # TypeError: add() takes exactly one argument (3 given)

a = {1, 2, 3, 4, 5}
a.update([7, 8, 9])
print(a) # {1, 2, 3, 4, 5, 7, 8, 9}
a.update(6, 7, 9)
print(a) # TypeError: 'int' object is not iterable

 

 

리스트 내장 함수 : discard, remove, pop, clear

  • 세트.discard(삭제할 값) : 세트 내 지정한 값을 삭제함
  • 세트.remove(삭제할 값) : 세트 내 지정한 값을 삭제함
  • 세트.pop() : 리스트 내 인덱스 위치의 값을 리턴한 뒤, 해당 값을 삭제함
  • 세트.clear() : 리스트 내 모든 값을 삭제함
a = {1, 2, 3, 4, 5, 6, 7}
a.discard(6)
print(a) # {1, 2, 3, 4, 5, 7}
a.remove(2)
print(a) # {1, 3, 4, 5, 7}

a = {1, 2, 3, 4, 5, 6, 7}
b = a.pop()
print(a) # {2, 3, 4, 5, 6, 7}
print(b) # 1
a.clear()
print(a) # set()

a = {1, 2, 3, 4, 5}
a.discard(7)
print(a) # {1, 2, 3, 4, 5}
a.remove(7) # KeyError: 7

 

 

세트 내장 함수 : max, min, sum

  • max(세트) : 세트 내 최댓값을 반환함
  • min(세트) : 세트 내 최솟값을 반환함
  • sum(세트) : 세트 내 총합을 계산하여 반환함
a = {1, 2, 3}
print(max(a)) # 3
print(min(a)) # 1
print(sum(a)) # 6

 

 

튜플 내장 함수 심화

  • max(튜플, default=값) : 튜플이 비어있을 때 default 값을 출력함
  • min(튜플, default=값) : 튜플이 비어있을 때 default 값을 출력함
  • sum(튜플, 기준 값) : 튜플 내 총합과 기준 값을 더함
a = set()
print(max(a, default=1)) # 1
print(max(a)) # ValueError: max() arg is an empty sequence
print(min(a, default=1)) # 1
print(min(a)) # ValueError: min() arg is an empty sequence

a = {1, 2, 3}
print(sum(a, 10)) # 16

 

 

반응형