티스토리 뷰
#9 파이썬 chapter 9. 집합 자료형
1. 집합 자료형은 어떻게 만들까?
집합(set)은 파이썬 2.3 부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.
집합 자료형은 아래와 같이 set 키워드를 사용해 만들 수 있다.
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}
위와 같이 set() 괄호 안에 리스트를 입력해서 만들거나 아래와 같이 문자열을 입력하여 만들 수 있다.
>>> s2 = set("Hello")
>>> s2
{'l', 'o', 'H', 'e'}
결과 값이 이상하지 않은가? 이제부터 그 이유를 배워보자.
2. 집합 자료형의 특징
위에서 만들었던 set("Hello") 를 입력하여 "Hello" 문자열로 set 자료형을 만들었는데 생성된 자료형에는 l 문자가 하나 빠져있고 순서도 뒤죽박죽이다. 그 이유는 set에 다음과 같은 2가지 특징이 있기 때문이다.
- 중복을 허용하지 않는다.
- 순서가 없다.
앞서 배운 리스트나 튜플은 순서가 있기 떄문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다. 이것은 딕셔너리와 비슷하다. 딕셔너리 역시 순서가 없는 자료형이라 인덱싱을 지원하지 않는다. 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 해야한다.
>>> s1 = set([1,2,3])
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1)
>>> t1
(1, 2, 3)
>>> t1[0]
1
3. 교집합, 합집합, 차집합 구하기
set 자료형을 굉장히 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
우선 아래와 같이 2개의 set 자료형을 만든 후에 따라 해 보자.
- 교집합
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
>>> s1 & s2
{4, 5, 6}
s1 과 s2 라는 set 자료형을 만든 후 '&' 기호를 사용하면 교집합을 간단히 구할 수 있다.
>>> s1.intersection(s2)
{4, 5, 6}
위와 같이 intersection 함수를 사용해도 같은 결과를 돌려준다. s1과 s2 의 자리를 바꾸어도 동일한 결괏값을 돌려준다.
-합집합
>>> s1|s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
'|' 기호를 사용한 방법이다.
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
위와같이 union 함수를 사용하면 된다. s1과 s2 의 자리를 바꾸어도 동일한 결괏값을 돌려준다.
-차집합
>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
빼기 (-) 기호를 사용한 방법이다.
>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}
difference 함수를 사용해도 차집합을 구할 수 있다.
4. 집합 자료형 관련 함수
- 값 1개 추가하기(add)
이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개의 값만 추가(add)할 경우에는 다음과 같이한다.
>>> s1 = set([1, 2, 3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
- 값 여러개 추가하기(update)
>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2, 3, 4, 5, 6}
위와 같이 여러개의 값을 추가할 때는 update 함수를 사용하면 된다.
- 특정 값 제거하기(remove)
>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}
위와 같이 특정값을 제거하고 싶을 때는 remove 함수를 사용하면 된다.
출처: 점프 투 파이썬
'파이썬의 기초' 카테고리의 다른 글
파이썬의 기초 (자료형의 저장공간, 변수) (0) | 2021.03.11 |
---|---|
파이썬의 기초(불 자료형) (0) | 2021.03.09 |
파이썬의 기초 (딕셔너리 관련 함수) (0) | 2021.03.08 |
파이썬의 기초 (딕셔너리 자료형) (0) | 2021.03.07 |
파이썬의 기초 ( 튜플 자료형) (0) | 2021.03.07 |