파이썬 자료구조 :: set

 프로그래머스 기초 단계를 풀면서 자료구조가 많이 부족함을 느껴서 정리를 해볼려고 한다. 

[딕셔너리 set 정리편]







참고 사이트 : 제대로 파이썬 (위키독스)



Container 타입 객체 

Iterable객체처럼 type으로 확인되지 않는 객체이고, 특성 속성을 가진 객체를 Container 객체라고 이야기한다. 

파이썬에 내장되어있는 Container 타입은 dict, set 이 있다.  

Container 객체는 순서정보를 포함하지 않아서, 선언할때랑 출력할때랑 값의 순서가 달라질 수 도 있다. 

Container타입들중에 순서를 가진 객체를 Sequence객체라 한다. list, tuple, str이 이에 해당 된다. 



set 

수학에서 집합과 같은 방식으로 작동하는 타입


set 문법: 

set_ex = { 1, 2, 3, 4 }

dict 처럼 중괄호를 쓰기는 하지만, key-value 형태가 아닌 하나의 값을 컴마로 구분해서 넣음 

같은 값을 가지는 객체는 1개만 가지는 특성이 있어서, 중복을 없애는 역할을 함

>>> {1, 2, 3, 1, 1, 2, 2, 3, 3, 4}
{1, 2, 3, 4}

>>> string = 'aabbbcdfdjhjwjhejdjdjdjdjdjkaksksksksksk'
>>> set(string)
{'s', 'b', 'd', 'f', 'k', 'w', 'e', 'c', 'a', 'h', 'j'}

set() 를 활용해서 형변환하면, 중복을 제거한 값이 리스트로 저장이 된다. set, dict 둘다 순서를 가지지 않기 때문에 결과값 순서는 달라질 수가 있다. 



set 선언: 

set_ex = set()         #set 클래스를 활용한 빈 set 생성

not_set = { }           #비어있는 중괄호는 set이 아닌, dict 타입

비어있는 set을 만들려면, set()로만 선언이 가능하다. 단순히 비어있는 중괄호만 선언하면 dict로 선언이 되는 것  



set 추가

set.add(value) 로 add 메서드를 사용해서, 값을 추가할 수 있다. 
>>> a = {1, 2, 3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}




set 값 제거

제거 방법은 두가지가 있음 
① remove(value) 메서드
제거하고자 하는 값을 선택 가능
>>> a = {1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}


② pop 메서드

pop은 가장 마지막 값을 제거하고, 제거한 값을 return해줌
만약 set객체가 비어있으면 에러를 발생시킵니다.
>>> a = {'a', 'b', 'c', 'd'}
>>> a.pop()
'd'
>>> a.pop()
'c'
>>> a.pop()
'a'
>>> a.pop()
'b'
>>> a.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'


③ discard 메서드


set.remove(value) 메서드를 썼을때, 삭제할려는 요소가 없다면 오류를 발생시킨다. 

하지만, set.discard(value)는 값이 없더라도 오류가 안나고 무시한다. 

참고로 set 집합은 인덱스를 가지고 있지 않다. 그래서 삭제를 할려고할때도 인덱스로 지우는게 아니라, value값으로 지운다. 




set 메서드 

1. set1.update(set2) : 여러 요소 합치기
>>> a = {1, 2}
>>> b = {'2', '3' , '4'}
>>> a.update(b)
>>> a
{'2', 1, 2, '4', '3'}

집합끼리의 합 뿐만 아니라, 리스트, 튜플, 딕셔너리 추가해 set로 합칠수가 있다. 
# 리스트로 감싸든, 튜플로 감싸든, 딕셔너리로 감싸든 set 으로 저장됨 
member_set.update(['리스트1', '리스트2'])
member_set.update(('튜플1', '튜플2'))
member_set.update({'딕1', '딕2'})

# 출력
# {'딕1', '딕2', '리스트1', '리스트2', '박여인', '일지매', '튜플1', '튜플2', '한사랑', '홍길동'}




2번 메서드부터는 수학 set (집합)연산과 관련이 있는 속성

2. set1.union(set2) : 합집합

>>> a = {1, 2, 3}
>>> b = {3, 4, 5}
>>> a.union(b)
{1, 2, 3, 4, 5}

3. set1.intersection(set2) : 교집합

>>> a = {1, 2, 3}
>>> b = {3, 4, 5}
>>> a.intersection(b)
{3}

4. set1 - set2 : 차집합 

>>> a = {1, 2, 3}
>>> b = {3, 4, 5}
>>> a - b
{1, 2}
>>> a = {1, 2, 3}
>>> b = {3, 4, 5}
>>> b - a
{4, 5}

5. set1.issubset(set2) : 부분집합 여부 확인 

>>> a = {1, 2}
>>> b = {1, 2, 3}
>>> c = {1, 3, 4}
>>> a.issubset(b)
True
>>> a.issubset(c)
False

6. set1.issuperset(set2) : 상위집합 확인

>>> a = {1, 2}
>>> b = {1, 2, 3}
>>> b.issuperset(a)
True



댓글

이 블로그의 인기 게시물

[KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

KT 에이블스쿨 : 핀테크 아이디어 공모전

KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계