◎ set 이란?
파이썬에서 set은 집합 자료형을 말한다. set은 대괄호([ ])를 사용하는 리스트와 달리 중괄호({ })를 사용한다. 이는 보통 리스트에서 2개 이상 중복되는 원소를 1개만 남기고 사용할 때 사용한다. set은 다음과 같은 특징이 존재한다.
- 중복된 원소를 가질 수 없다.
- 순서가 존재하지 않는다.
> 예제 코드)
만약 [1, 2, 3, 3, 4]와 같은 리스트나 "Hello"와 같은 문자열이 있다고 가정해보자. 이 두개를 집합으로 만들면 아래와 같은 결과가 반환된다.
list1 = [1, 2, 3, 3, 4]
str1 = "Hello"
print("set(list1) : ", set(list1))
print("set(str1) : ", set(str1))
> 실행 결과)
위와 같이 중복된 원소인 3과 문자 'l'이 한 개씩만 남게 되는 것을 확인할 수 있다. 이로써 set은 중복된 원소를 가지지 않는다는 특징을 확인하였다. 그렇다면 순서가 존재하지 않는다는 것은 무엇일까? set(list1)의 결과는 우연히 오름차순으로 정렬되어 출력되긴 했지만 set(str1)의 결과를 보면 순서가 뒤죽박죽인 것을 확인할 수 있다. 위 코드를 몇번 더 실행시켜 보겠다.
set(list1)의 결과는 계속해서 오름차순으로 출력이 되고 있으나 set(str1)의 결과는 실행할 때마다 순서가 바뀌는 것을 확인할 수 있다. 이처럼 set은 순서가 존재하지 않는다는 특징을 가지고 있다.
◎ set의 합집합, 교집합, 차집합
set은 집합 자료형이므로 합집합, 교집합, 차집합을 구할 수 있다. 각각 모두 함수를 사용해도 되지만 더 간결한 표현을 위해 기호를 사용하는 경우가 많으니 두 표현이 모두 동일하다는 것을 기억하도록 하자.
1) 합집합(union(), |)
합집합을 구하기 위해서는 union() 함수를 사용하는 방법과 | 기호를 사용하는 방법이 있다. 두 방법의 결과는 모두 동일하다.
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
print("s1.union(s2) : ", s1.union(s2))
print("s2.union(s1) : ", s2.union(s1))
print("s1 | s2 : ", s1 | s2)
2) 교집합(intersection(), &)
교집합을 구하기 위해서는 intersection() 함수를 사용하는 방법과 & 기호를 사용하는 방법이 있다. 이 역시 결과는 둘다 동일하다.
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
print("s1.intersection(s2) : ", s1.intersection(s2))
print("s2.intersection(s1) : ", s2.intersection(s1))
print("s1 & s2 : ", s1 & s2)
3) 차집합(difference(), -)
차집합을 구하기 위해서는 difference() 함수를 사용하는 방법과 - 기호를 사용하는 방법이 있고, 결과는 모두 동일하다.
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
print("s1.difference(s2) : ", s1.difference(s2))
print("s2.difference(s1) : ", s2.difference(s1))
print("s1 - s2 : ", s1 - s2)
print("s2 - s1 : ", s2 - s1)