파이썬 자료구조 :: 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 추가
>>> a = {1, 2, 3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
set 값 제거
>>> a = {1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}
>>> 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'
set.remove(value) 메서드를 썼을때, 삭제할려는 요소가 없다면 오류를 발생시킨다.
하지만, set.discard(value)는 값이 없더라도 오류가 안나고 무시한다.
참고로 set 집합은 인덱스를 가지고 있지 않다. 그래서 삭제를 할려고할때도 인덱스로 지우는게 아니라, value값으로 지운다.
set 메서드
>>> a = {1, 2}
>>> b = {'2', '3' , '4'}
>>> a.update(b)
>>> a
{'2', 1, 2, '4', '3'}
# 리스트로 감싸든, 튜플로 감싸든, 딕셔너리로 감싸든 set 으로 저장됨
member_set.update(['리스트1', '리스트2'])
member_set.update(('튜플1', '튜플2'))
member_set.update({'딕1', '딕2'})
# 출력
# {'딕1', '딕2', '리스트1', '리스트2', '박여인', '일지매', '튜플1', '튜플2', '한사랑', '홍길동'}
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
댓글
댓글 쓰기