본문 바로가기
Python 코딩도장

파이썬 코딩 도장 Unit 26 정리(1) - 세트 만들기

by chanfficial 2022. 2. 7.

Unit 26. 세트 사용하기

  • 파이썬은 집합을 표현하는 세트(set)라는 자료형을 제공한다.
  • 세트는 합집합, 교집합, 차집합 등의 연산이 가능하다.

 

1. 세트 만들기

  • 세트는 { } (중괄호)안에 값을 저장하며 각 값은 , (콤마)로 구분해준다.
    세트 = {값1, 값2, 값3}​
    >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
    >>> fruits
    {'pineapple', 'orange', 'grape', 'strawberry', 'cherry'}​
  • 세트는 요소의 순서가 정해져 있지 않아서 세트를 출력해보면 매번 요소의 순서가 다르게 나온다.
  • 세트에 들어가는 요소는 중복될 수 없기 때문에 세트에 'orange'를 두 개 넣어도 실제로는 한 개만 들어간다.
    >>> fruits = {'orange', 'orange', 'cherry'}
    >>> fruits
    {'cherry', 'orange'}​
  • 특히 세트는 리스트, 튜플, 딕셔너리와 달리 [ ] (대괄호)로 특정 요소만 출력할 수는 없다.
    >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
    >>> print(fruits[0])
    Traceback (most recent call last):
      File "<pyshell#42>", line 1, in <module>
        print(fruits[0])
    TypeError: 'set' object does not support indexing
    >>> fruits['strawberry']
    Traceback (most recent call last):
      File "<pyshell#43>", line 1, in <module>
        fruits['strawberry']
    TypeError: 'set' object is not subscriptable​
    - [ ] 로 특정 요소를 출력하려 했을 때 에러가 발생한다.

 

 

1-1. 세트에 특정 값이 있는지 확인하기

  • 세트에 특정 값이 있는지 확인하려면 지금까지 리스트, 튜플, 딕셔너리에 사용했던 in 연산자를 사용한다.
    # 값 in 세트
    >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
    >>> 'orange' in fruits
    True
    >>> 'peach' in fruits
    False​
    - 세트에 특정 값이 있으면 True, 없으면 False가 나온다.
  • 반대로 in 앞에 not을 붙이면 특정 값이 없는지 확인할 수 있다.
    # 값 not in 세트
    >>> 'peach' not in fruits
    True
    >>> 'orange' not in fruits
    False​
    - 반대로 not in은 특정 값이 없으면 True, 있으면 False가 나온다.

 

 

1-2. set를 사용하여 세트 만들기

  • set 에는 반복 가능한 객체(iterable)를 넣는다.
    set(반복가능한객체)​
  • set('apple')과 같이 영문 문자열을 세트로 만들면 'apple'에서 유일한 문자인 'a', 'p', 'l', 'e' 만 세트로 만들어지고, 중복된 문자는 포함되지 않는다.
    >>> a = set('apple') # 유일한 문자만 세트로 만듦
    >>> a
    {'e', 'l', 'a', 'p'}
  • 그리고 set(range(5)) 와 같이 숫자를 만들어내는 range를 사용하면 0부터 4까지의 숫자를 가진 세트를 만들 수 있다.
    >>> b = set(range(5))
    >>> b
    {0, 1, 2, 3, 4}​
  • 빈 세트는 c = set() 와 같이 set에 아무것도 지정하지 않으면 된다.
    >>> c = set()
    >>> c
    set()​
  • 단, 세트가 { }를 사용한다고 해서 c = { } 와 같이 만들면 빈 딕셔너리가 만들어지므로 주의해야 한다.
  • 자료형의 자료는 type을 사용하여 알 수 있다.
    # type(객체)
    >>> c = {}
    >>> type(c)
    <class 'dict'>
    >>> c = set()
    >>> type(c)
    <class 'set'>​

 

 

※ 참고

 

1. 한글 문자열을 세트로 만들기

  • set을 사용하여 한글 문자열을 세트로 만들면, 음절 단위로 세트가 만들어진다.
    >>> set('안녕하세요')
    {'녕', '요', '안', '세', '하'} # 순서는 매번 다름​

 

2. 세트 안에 세트 넣기

  • 세트는 리스트, 딕셔너리와 달리 세트 안에 세트를 넣을 수 없다.
    >>> a = {{1, 2}, {3, 4}}
    Traceback (most recent call last):
      File "<pyshell#3>", line 1, in <module>
        a = {{1, 2}, {3, 4}}
    TypeError: unhashable type: 'set'​

 

3. 프로즌 세트

  • 파이썬은 말 그대로 얼어 있는 세트인 프로즌세트(frozenset), 즉 내용을 변경할 수 없는 세트도 제공한다.
    프로즌세트 = frozenset(range(10))​
    >>> a = frozenset(range(10))
    >>> a
    frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})​
  • frozenset는 집합 연산과 메서드에서 요소를 추가하거나 삭제하는 연산, 메서드는 사용할 수 없다.
    >>> a = frozenset(range(10))
    >>> a |= 10
    Traceback (most recent call last):
      File "<pyshell#4>", line 1, in <module>
        a |= 10
    TypeError: unsupported operand type(s) for |=: 'frozenset' and 'int'
    >>> a.update({10})
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        a.update({10})
    AttributeError: 'frozenset' object has no attribute 'update'​
  • frozenset는 세트 안에 세트를 넣고 싶을 때 사용한다.
    >>> frozenset({frozenset({1, 2}), frozenset({3, 4})})
    frozenset({frozenset({1, 2}), frozenset({3, 4})})​
    - 이처럼 frozenset는 frozenset를 중첩해서 넣을 수 있는데, frozenset만 넣을 수 있고 일반 set는 넣을 수 없다.