본문 바로가기

카테고리 없음

[Python] 집합(Set) 자료형

집합이란?

집합 자료형은 여러 개의 값을 저장한다. 그 점에서 기본적으로 리스트와 비슷하지만, 두 가지의 구별되는 특징을 가진다.

 

  • 값의 중복을 허용하지 않는다.
  • 순서가 없다.

왜 이런 특징을 가지는지는 수학의 집합을 생각해보면 직관적으로 이해할 수 있다.

 

수학의 집합 또한, 값의 중복을 허용하지 않고 순서라는 개념을 별도로 가지지 않기 때문이다.


Python의 집합은 값의 중복을 허용하지 않기 때문에, 중복되는 값을 제거하는 필터로서 사용할 수 있다.

 

또한, 순서가 없기에 list와는 달리 인덱싱을 할 수 없음에 유의해야 한다.

 

집합 자료형의 생성

집합 자료형은 (value1, value2, ...)의 형태로 구성된다. 집합 자료형은 set()이라는 함수로 만들 수 있다.

var = set([1, 2, 3])

>>> type(var)
    <class 'set'>

 

교집합, 합집합, 차집합

수학의 집합이 그렇듯, Python의 집합 또한 집합끼리의 연산을 함으로써 빛을 발한다.

 

set_1 = set([1, 2, 3])
set_2 = set([3, 4, 5])

 

 

교집합은 '&'(ampersand) 기호를 통해 손쉽게 구할 수 있으며, set.intersection() 메서드를 이용할 수도 있다.

>>> set_1 & set_2
    {3}
    
>>> set_1.intersection(set_2)
    {3}

 

 

합집합은 '|'(vertical bar 또는 pipe) 기호를 통해 구할 수 있으며, set.union() 메서드를 이용해도 결과는 같다.

>>> set_1 | set_2
    {1, 2, 3, 4, 5}
    
>>> set_1.union(set_2)
    {1, 2, 3, 4, 5}

 

 

차집합은 마이너스 기호를 통해 구할 수 있다. set.difference() 메서드를 이용할 수도 있다.

>>> set_1 - set_2
    {1, 2}
    
>>> set_1.difference(set_2)
    {1, 2}

 

 

값 추가와 제거

 

리스트에서 값을 추가하거나 제거하는 것과 크게 다르지 않지만, 메서드를 이용해야 한다.

 

값을 추가하는 것은 set.add() 메서드와 set.update() 메서드를 사용하는데, add는 값을 하나만 추가하지만 update는 여러 값을 한번에 추가하는데 사용된다.

var = set([1, 2, 3])

var.add(4)

>>> var
    {1, 2, 3, 4}
    
var.update([5, 6, 7])

>>> var
    {1, 2, 3, 4, 5, 6, 7}

 

 

값의 제거는 set.remove() 메서드를 사용하면 할 수 있다.

var = set([1, 2, 3])

var.remove(3)

>>> var
    {1, 2}