ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 파이썬의 set, frozenset 자료형 알아보기
    Python/파이썬 기초 2024. 2. 29. 17:07
    반응형

    파이썬의 set, frozenset 자료형 알아보기


    파이썬(Python)에서 수학의 집합 개념을 표현할 수 있는 자료형으로는 set 또는 frozenset이 있습니다. 이는 중복 제거와 교집합, 합집합, 차집합 계산 등의 연산을 지원해서 복잡한 코드를 적어야 하는 문제를 간편하게 해결할 수 있게 해줍니다. 몇 가지 코드 예제를 통해서 set, frozenset 자료형의 특징과 사용 예시를 알아보도록 하겠습니다.

     

     

    set 자료형


    set 자료형은 흔히 집합이라고 부르는 파이썬 기본 자료형입니다. 파이썬 공식 문서 기준으로는 서로 다른 해시 가능 객체의 순서 없는 컬렉션이라는 알 수 없는 정의가 제시되어 있는데요, 이를 쉬운 말로 풀어쓰면 아래와 같이 나타낼 수 있습니다.

     

    • 중복을 허용하지 않습니다.
    • 순서 정보를 저장하지 않습니다.
    • 내용을 변경 가능합니다.

    위 속성을 모두 가지고 있는 리스트와 비슷한 객체입니다.

     

     

    set 자료형을 사용하기 위해서는, 중괄호 {}를 이용해서 각 요소들을 표현하면 됩니다. 중복을 허용하지 않기 때문에, 어떤 리스트에 중복값을 없애고 싶다면 set으로 변환하는 방식을 이용해볼 수도 있습니다. 아래에 set 자료형을 생성하거나, 다른 자료형을 set으로 변환하는 방법을 소개해 드리겠습니다.

     

     

    # 새로운 set 만들기
    first_set = {1,4,7,8,5,2,3,6,9}
    print(first_set)
    {1, 2, 3, 4, 5, 6, 7, 8, 9}

     

    # 리스트를 set으로 변환하기
    second_set = set([9,6,3,2,58,5,5,5,2])
    print(second_set)
    {2, 3, 5, 6, 9, 58}

     

     

    위 코드에서 나타나다시피, set 자료형은 중복값이 삭제되고, 순서는 오름차순으로 고정되는 것을 확인할 수 있습니다. 다만, 순서 정보(인덱스)를 저장하지는 않으므로 인덱싱을 이용한 각 요소 조회는 불가능합니다. 하지만, 내용 변경이 가능하기 때문에 add 함수를 이용해서 값을 추가하는 등의 작업이 가능합니다.

     

     

    # set 인덱싱 가능 여부 확인하기
    first_set[3]
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    Cell In[3], line 2
          1 # set 인덱싱 가능 여부 확인하기
    ----> 2 first_set[3]
    
    
    TypeError: 'set' object is not subscriptable

     

    # 기존 set에 값 추가하기
    first_set.add(40)
    print('add 40: ', first_set)
    
    # 기존 set에 값 제거하기
    first_set.discard(40)
    print('discard 40: ', first_set)
    add 40:  {1, 2, 3, 4, 5, 6, 7, 8, 9, 40}
    discard 40:  {1, 2, 3, 4, 5, 6, 7, 8, 9}

     

     

    frozenset 자료형


    frozenset 자료형은 앞서 살펴본 set 자료형에서 변경 불가능한(immutable) 속성이 하나 추가된 자료형입니다. 이 때문에, add, discard 함수 등을 사용할 수 없는 제약이 생겨나게 됩니다.

     

     

    # frozenset 만들기
    first_frozenset = frozenset({1,4,7,8,5,2,3,6,9})
    print(first_frozenset)
    frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9})

     

    # frozenset에 값 추가 시도하기
    first_frozenset.add(40)
    ---------------------------------------------------------------------------
    
    AttributeError                            Traceback (most recent call last)
    
    Cell In[6], line 2
          1 # frozenset에 값 추가 시도하기
    ----> 2 first_frozenset.add(40)
    
    
    AttributeError: 'frozenset' object has no attribute 'add'

     

     

    set 자료형의 활용: dict 객체 생성


    set 자료형으로 데이터를 저장할 경우, 이 데이터는 손쉽게 딕셔너리(dict) 자료형을 생성할 수 있는 key의 집합이 됩니다. 딕셔너리는 기본적으로 key와 value를 모두 적어야 하는 불편함이 있는데, 이 방법을 사용할 경우 타이핑하는 수고를 조금 줄여둘 수 있고 아직 value가 정해지지 않은 딕셔너리를 정의할 수 있다는 장점도 있습니다.

     

     

    # key 집합 및 빈 dict 생성
    keys = {'a', 'b,', 'c'}
    first_dict = {}
    
    # value 설정
    for key in keys:
        first_dict[key] = 0
    
    print(first_dict)
    {'c': 0, 'b,': 0, 'a': 0}
    반응형

    댓글

문의: jwkang3929@naver.com