오늘은 집합 자료형에 대해서 공부하였다.
집합(set)은 집합에 관련된 것을 쉽게 처리하기 위해 만들어진 자료형이다.
집합 자료형은 두가지의 특징을 가지고 있다.
set은 중복을 허용하지 않는 특징 때문에 데이터의 중복을 제거하기 위한 필터로 종종 사용한다.
리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 요솟값을 얻을 수 있지만,
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
s1 = set([1, 2, 3])
s1
{1, 2, 3}
위와 같이 set()의 괄호 안에 리스트를 입력하여 만들거나 다음과 같이 문자열을 입력하여 만들 수도 있다.
s2 = set("Hello")
s2
{'e', 'H', 'l', 'o'}
비어 있는 집합 자료형은
s = set()
로 만들 수 있다.
set 자료형을 정말 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
교집합 구하기
s1 과 s2의 교집합을 구해 보자. 다음과 같이 ‘&’를 이용하면 교집합을 간단히 구할 수 있다.
s1 & s2
{4, 5, 6}
또는 다음과 같이 intersection 함수를 사용해도 결과는 동일하다.
s1.intersection(s2)
{4, 5, 6}
s2.intersection(s1)을 사용해도 결과는 동일하다.
합집합 구하기
이번에는 합집합을 구해 보자. ‘|’를 사용하면 합집합을 구할 수 있다. 이때 4, 5, 6처럼
중복해서 포함된 값은 1개씩만 표현된다.
s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
union 함수를 사용해도 된다.
s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
s2.union(s1)을 사용해도 결과는 동일하다.
차집합 구하기
마지막으로 차집합을 구해 보자. -(빼기)를 사용하면 차집합을 구할 수 있다.
s1 - s2
{1, 2, 3}
s2 - s1
{8, 9, 7}
difference 함수를 사용해도 차집합을 구할 수 있다.
s1.difference(s2)
{1, 2, 3}
s2.difference(s1)
{8, 9, 7}