• 2020. 6. 3.

    by. 윈썸지니

    반응형

    파이썬의 자료형 집합( Set) 에 관한 내용 입니다.

     

    집합 자료형은 ?

    파이썬에서 집합 자료형은 2.3 버전 부터 지원하는 자료형 입니다.

    set우리가 수학에서 배운 집합의 개념과 비슷합니다.

    Set은 순서가 없고, 집한내에서 유일한( unique) 값을 가집니다.

     

    집합(set) 선언은 ?

    집합은 중괄호 또는 set() 사용합니다. 하지만 빈 집합을 생성하려고 {} 만 사용하면 Dictionary 로 인식을 하므로 set() 을 사용하여야 합니다.

    중복된 값은 자동으로 걸러서 보여줍니다. 또한 순서도 없습니다. 즉 어떤 요소값이 먼저 나올지 알 수 없습니다.

    >>> x = { 1, 3, 3, 5}
    >>> type(x)
    >>> x
    {1, 3, 5}
    >>> y = {}
    >>> type(y)
    >>> y = set()
    >>> type(y)
    >>> x = set([1, 3, 3, 5])
    >>> type(x)
    >>> x
    {1, 3, 5}
    >>>

     

    아래 예는 집합이 여러가지 형태의 요소 값을 가질 수 있는 것을 보여 줍니다.

    >>> x = set(["Hello", 1, 3, 5, 7, 1, 3.5, (1,3)])
    >>> x
    {1, 3, 3.5, 5, 7, 'Hello', (1, 3)}
    >>> y = set("Hello")
    >>> y
    {'H', 'e', 'o', 'l'}
    >>>

     

    ● 집합(set) 요소값 변경 ?

    집합은 순서가 없으므로 인덱스로 접근은 불가능 합니다. 요소값 추가, 삭제 등은 아래 예제를 참고하세요.

     

    • add : 값을 하나만 추가 가능합니다.
    • update : 변경이 아니고 여러 값을 추가 할 경우 사용합니다.
    • remove : 요소값을 삭제 합니다.
    • del : 집합 자체를 삭제 합니다.
    >>> y = set("Hello")
    >>> y
    {'H', 'e', 'o', 'l'}
    >>> y.add([10,20])
    Traceback (most recent call last):
    File "", line 1, in
    y.add([10,20])
    TypeError: unhashable type: 'list'
    >>> y.add(10)
    >>> y
    {'e', 'l', 'H', 10, 'o'}
    >>> y.update([10,20,30])
    >>> y
    {'e', 'l', 'H', 10, 20, 'o', 30}
    >>> y.remove(10)
    >>> y
    {'e', 'l', 'H', 20, 'o', 30}
    >>>
    >>> del y
    >>> y
    Traceback (most recent call last):
    File "", line 1, in
    y
    NameError: name 'y' is not defined
    >>>

     

    ● 집합(set) 사용은 언제 유용한가?

    집합은 순서가 없지만 중복 요소값을 제거해 준다고 했습니다. 중복 값을 제거를 위해 사용하였다가 다시 리스트 또는 튜플을 사용합니다.

    그럼 인덱스로도 접근이 가능하겠지요?

    리스트 또는 튜플로 변형하는 방법입니다.

    예제를 참고하세요.

    >>> x = set( [1,3,5,7,9])
    >>> x
    {1, 3, 5, 7, 9}
    >>> y = list(x)
    >>> y
    [1, 3, 5, 7, 9]
    >>> y[0]
    1
    >>> x[1]
    Traceback (most recent call last):
    File "", line 1, in
    x[1]
    TypeError: 'set' object is not subscriptable
    >>> z = tuple(x)
    >>> z
    (1, 3, 5, 7, 9)
    >>> z[0]
    1
    >>>

     

    ● 집합(set) 연산

    집합을 배웠으니 학교에서 배운 교집합, 합집합, 차집합, 대칭차집합(합집합 교집합 ) 등의 연산을 할 수 있습니다.

    연산 기호를 사용하여 할 수 도 있으며, 메소드를 사용 할 수도 있습니다.

    두가지 방법으로 집합 연산을 해 보겠습니다.

    >>> x = set([1, 2, 3, 4, 5])
    >>> y = set([3, 4, 5, 6, 7])
    #### 합집합
    >>> c = x | y 
    >>> c
    >>> c
    {1, 2, 3, 4, 5, 6, 7}
    #### 합집합
    >>> d = x.union(y) 
    >>> d
    {1, 2, 3, 4, 5, 6, 7}
    #### 교집합
    >>> c = x & y 
    >>> c
    {3, 4, 5}
    #### 교집합
    >>> d = x.intersection(y) 
    >>> d
    {3, 4, 5}
    >>>
    >>> # 차집합
    >>> c = x - y
    >>> c
    {1, 2}
    >>> d = x.difference(y)
    >>> d
    {1, 2}
    >>>
    >>> # 대칭 차집합
    >>> c = x ^ y
    >>> c
    {1, 2, 6, 7}
    >>> d = x.symmetric_difference(y)
    >>> d
    {1, 2, 6, 7}

     

    TIP 으로 연산과 동시에 변수에 할당하는 방법을 알려 드릴께요.

    |=, &=, -=, ^= 을 사용하는데 역시 예제를 보시면 이해가 빠를 거예요.

    >>> x = set([1,2,3,4,5])
    >>> y = set([3,4,5,6,7])
    >>> c = x | y
    >>> c
    {1, 2, 3, 4, 5, 6, 7}
    >>> x = c
    >>> x
    {1, 2, 3, 4, 5, 6, 7}

    ## 위의 코드를 아래와 같이 하면 바로 연산 및 할당을 동시에 할 수 있습니다. 코드가 간단해 집니다.
    >>> x = set([1,2,3,4,5])
    >>> y = set([3,4,5,6,7])
    >>> x |= y
    >>> x
    {1, 2, 3, 4, 5, 6, 7}
    >>>

    이상으로 집합에 대해 알아 보았습니다. 이제 파이썬에서 다루는 자료형의 개념에 대해서는 다 공부했습니다.

    좀더 자세한 내용을 다루기로 했는데 다음 포스팅에서는 자료형의 연산에 대해 좀 더 자세히 다루어 볼 예정입니다.

    반응형