본문 바로가기
언어/Python

[Python 기본 공부정리] 3-6. 자료형-집합(set)

by 민-Zero 2019. 12. 10.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

1. 집합(set)

집합 자료형은 수학에서의 집합의 특성과 비슷하다. 즉, 집합안의 데이터는 순서가 없으며 중복된 데이터가 없다. 순서가 없기 때문에 인덱싱이나 슬라이싱이 불가능 하다.

다양한 방법을 통해 set 자료형을 생성할 수 있다. {} 를 사용하여 생성 가능한대 딕셔너리와 다른점은 key값이 없다는 것이다. 또 set()안에 리스트나 문자열을 넣어 생성할 수 있다. 집합 자료형의 특징은 "Hello"문자열로 생성한 집합을 확인 하면 확실히 알 수 있다. Hello로 데이터를 집어 넣었지만 o e H l 로 순서 상관없이 저장되며 컴파일 할때 마다 순서가 바뀌는 것도 확인할 수 있다. 또한 'l' 이 2개 들어 있지만 집합에서는 중복을 허용하지 않으므로 1개의 l만 남는것을 확인 할 수 있다.

set 자료형의 원소로 리스트나 딕셔너리는 값이 변할 수 있는 mutable한 데이터 이므로 사용 할 수 없고 튜플의 경우 값이 변하지않는 immutable한 데이터 이므로 사용 가능하다.

만약 set자료형으로 생성된 데이터를 인덱싱을 통해 접근하고 싶다면 list()를 통해 리스트 형태로 변환후 인덱싱이나 슬라이싱을 진행하면 된다.

 

2. 집합의 연산

수학에서 사용하던 집합의 연산 합집합, 교집합, 차집합, 대칭차집합의 결과를 파이썬을 통해 확인 할 수 있다.

 

1) 합집합

두 집합 A,B에 대해, 두 집합의 원소 모두를 가지는 집합을 뜻한다.

 

2가지 방법으로 합집합을 생성할 수 있으며 중복된 데이터는 1개로 만들어 두 집합의 원소를 모두 포함하도록 만든다.

 

2) 교집합

두 집합 A,B에 대해, 두 집합 모두에 속하는 원소들로 이루어진 집합을 뜻한다.

 

두 집합에 모두 속하는 1, 3 이란 원소만으로 이루어진 집합이 생성 된다.

 

3) 차집합

A-B 의 경우 차집합의 원소는 A에는 포함되지만 B에는 포함되지 않는 집합이다. 여집합이 차집합의 특별한 경우이다.

 

A 와 B 에 둘다 들어가는 교집합의 원소가 A에서 빠진 집합이 차집합이 됨을 알 수 있다.

 

4) 대칭차집합

대칭차집합의 경우 두 집합 A,B에 대해 둘중 한 집합에는 포함 되지만 두 집합 모두에는 포함되지 않는 원소들의 집합이다. 즉, A,B의 합집합 - 교집합 이라고 생각하면 된다.

 

합집합 {1, 2, 3, 4, 5, 6, 7} 에서 교집합 {1, 3}이 빠졌음을 알 수 있다.

 

3. 집합 관련 메소드

1) add(), update()

 

집합에 값을 1개 추가할때는 add()를 사용 여러값을 한번에 추가할 때는 update()를 사용 한다. update를 사용할 경우 itarable 데이터를 사용해야 하므로 리스트 형태로 넣어 준다.

 

2) remove(), discard()

 

두 함수 모두 원하는 값을 제거하는 기능을 가진다.

 

차이점은 remove의 경우 집합에 존재하지 않는 값을 지우려고 하면 keyError를 발생 시키지만 discard의 경우는 아무런 에러도 발생시키지 않는다.

 

3) issubset(), issuperset(), isdisjoint()

 

issubset()함수의 경우 부분집합의 여부를 확인하여 True 나 False값을 반환한다. a.issubset(b)의 경우 a가 b의 부분집합이 아니므로 False를 반환 한다.

 

issuperset()은 issubset()함수와 반대의 경우를 출력한다.

 

isdisjoint()함수는 두 함수를 비교하여 교집합이 없으면 True를 있으면 False를 반환한다. 교집합의 유무를 확인하므로 a.isdisjoint(b)나 b.isdisjoint(a)나 같은 값을 반환한다.  

댓글