파이썬에서 사용하는 자료구조 set에 대해 알아볼 것이다. 매번 set자료구조를 사용하는 일은 많은데, 효율성 있게 활용해야 하고 기억해두고 싶어서 포스팅 한다.
파이썬에서 set은 집합 자료형으로 사용된다. 주된 특징으로는 순서를 보장하지 않고, 중복된 원소를 포함하지 않는다. 특징으로 유추하면 set은 해시테이블로 구현되어 있음을 생각해볼 수 있다.
교집합은 말 그대로 두개의 set에 중복으로 존재하는 원소를 말한다.
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
# 교집합 메서드 intersection
# 연산 결과도 set 타입이다.
print(s1.intersection(s2))
# 교집합 연산자 &
# 연산 결과도 set 타입이다.
print(s1 & s2)
말 그대로 두개의 set의 합집합 결과를 반환해준다.
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
# 합집합 메서드 union
# 연산 결과도 set 타입이다.
print(s1.union(s2))
# 합집합 연산자 |
# 연산 결과도 set 타입이다.
print(s1 | s2)
이것도 말 그대로 ...
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
# 차집합 메서드 difference
# 연산 결과도 set 타입이다.
print(s1.difference(s2))
print(s2.difference(s1))
# 차집합 연산자 -
# 연산 결과도 set 타입이다.
print(s1 - s2)
print(s2 - s1)
이것도 말 그대로 ...
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
# 대칭 차집합 메서드 symmetric_difference
# 연산 결과도 set 타입이다.
print(symmetric_difference(s1,s2))
# 대칭 차집합 연산자 -
# 연산 결과도 set 타입이다.
print(s1 ^ s2)
이렇게 대표적인 연산들만 알아도 크게 문제될 일은 없다. 하지만, 관련된 다른 연산들도 있어서 소개한다.
우리가 정수를 더하고 할당할 때에 +=
를 사용하는 것 처럼 집합 연산자에서도 이를 그대로 이용할 수 있다.
s1 = set([1, 2, 3, 4, 5])
s1 |= set(6)
{1,2,3,4,5,6}
s1 = set([1, 2, 3, 4, 5])
s1 &= set(5)
{5}
s1 = set([1, 2, 3, 4, 5])
s1 -= set(5)
{1,2,3,4}
s1 = set([1, 2, 3, 4, 5])
s1 ^= set(5)
{1,2,3,4}