ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • set
    Python 2023. 10. 11. 14:04

    집합을 표현하는 세트(set) 자료형으로 합집합, 교집합, 차집합 등의 연산 가능

    >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
    >>> fruits
    {'cherry', 'pineapple', 'strawberry', 'grape', 'orange'}
    
    >>> fruits = {'orange', 'orange', 'cherry'}
    >>> fruits
    {'cherry', 'orange'}

    요소의 순서가 정해져 있지 않아 출력할 때마다 요소의 순서가 다르게 나옴

    요소 중복될 수 없음

    >>> fruits['cherry']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'set' object is not subscriptable

    리스트, 튜플, 딕셔너리와는 달리 [](대괄호)로 특정 요소만 출력할 수 없음

    >>> # 세트에 특정 값이 있는지 확인
    >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
    >>>
    >>> 'orange' in fruits
    True
    >>> 'peach' in fruits
    False
    >>> 'peach' not in fruits
    True
    >>> 'orange' not in fruits
    False

     

    >>> # 세트 자료구조 만들기
    >>> a = {'apple', 'orange', 'cherry'}
    >>> b = set('apple')
    >>> c = set()    # 빈 세트
    >>>
    >>> # 딕셔너리 자료구조
    >>> d = {'name':'cat', 'age':3}
    >>> e = dict( [['name', 'age'], ['cat', 3]] )
    >>> f = {}    # 빈 딕셔너리
    >>>
    >>> # 타입 알아보기
    >>> c = {}
    >>> type(c)
    <class 'dict'>
    >>>
    >>> c = set()
    >>> type(c)
    <class 'set'>

     

    집합 연산 사용
    >>> # 세트의 합집합(union)
    >>> a = {1, 2, 3, 4}
    >>> b = {3, 4, 5, 6}
    >>> a|b
    {1, 2, 3, 4, 5, 6}
    >>> set.union(a, b)
    {1, 2, 3, 4, 5, 6}
    >>> a or b
    {1, 2, 3, 4}
    >>> set.union( {1, 2, 3, 4}, {3, 4, 5, 6} )
    {1, 2, 3, 4, 5, 6}
    >>> a & b
    {3, 4}
    >>> set.intersection(a, b)
    {3, 4}
    >>> set.intersection(b, a)
    {3, 4}
    >>>
    >>> # 차집합
    >>> a = {1, 2, 3, 4}
    >>> b = {3, 4, 5, 6}
    >>> a - b
    {1, 2}
    >>> b - a
    {5, 6}
    >>> set.difference(a, b)
    {1, 2}
    >>> set.difference(b, a)
    {5, 6}
    >>>
    >>> # 교집합
    >>> a = {1, 2, 3, 4}
    >>> b = {3, 4, 5, 6}
    >>> set.intersection(a, b)
    {3, 4}
    >>> a & b
    {3, 4}
    >>>
    >>> # 대칭차집합
    >>> a = {1, 2, 3, 4}
    >>> b = {3, 4, 5, 6}
    >>> a ^ b
    {1, 2, 5, 6}
    >>> set.symmetric_difference(a, b)
    {1, 2, 5, 6}
    >>>
    >>> # 집합 연산을 한 후 할당 연산
    >>> # 현재 세트 + 다른 세트
    >>> a = {1, 2, 3, 4}
    >>> b = {5}
    >>> c = a|b
    >>> c
    {1, 2, 3, 4, 5}
    >>>
    >>> # 간단히 다시 쓰기
    >>> a = {1, 2, 3, 4, 5}
    >>> a |= {5}    # 집합 a에 {5}를 |(합집합) 연산 후 할당
    >>>
    >>> a.update( {5} )
    >>> a
    {1, 2, 3, 4, 5}
    >>>
    >>> # 겹치는 요소 저장
    >>> a = {1, 2, 3, 4}
    >>> a &= {0, 1, 2, 3, 4}
    >>> a
    {1, 2, 3, 4}
    >>> a = {1, 2, 3, 4}
    >>> a.intersection_update( {0, 1, 2, 3, 4} )
    >>> a
    {1, 2, 3, 4}
    >>>
    >>> # 현재 세트 - 다른 세트 
    >>> a = {1, 2, 3, 4}
    >>> a -= {3}
    >>> a
    {1, 2, 4}
    >>> a = {1, 2, 3, 4}
    >>> a.difference_update({3})
    >>> a
    {1, 2, 4}
    >>>
    >>> # 겹치지 않는 요소 저장
    >>> a = {1, 2, 3, 4}
    >>> a ^= {3, 4, 5, 6}
    >>> a
    {1, 2, 5, 6}
    >>> a = {1, 2, 3, 4}
    >>> a.symmetric_difference_update({3, 4, 5, 6})
    >>> a
    {1, 2, 5, 6}
    >>>
    >>> # 부분집합
    >>> a = {1, 2, 3, 4}
    >>> a <= {1, 2, 3, 4}
    True
    >>> a.issubset( {1, 2, 3, 4} )
    True
    >>>
    >>> # 진부분집합
    >>> a = {1, 2, 3, 4}
    >>> a < {1, 2, 3, 4, 5}
    True
    >>>
    >>> # 상위집합
    >>> a = {1, 2, 3, 4}
    >>> a >= {1, 2, 3, 4}
    True
    >>> a.issuperset( {1, 2, 3, 4} )
    True
    >>>
    >>> # 진상위집합
    >>> a = {1, 2, 3, 4}
    >>> a > {1, 2, 3}
    True
    >>>
    >>> # 세트가 같은지 다른지 확인
    >>> a = {1, 2, 3, 4}
    >>> a == {1, 2, 3, 4}
    True
    >>> a == {4, 2, 1, 3}
    True    # 세트는 요소의 순서가 정해져 있지 않으므로 각 요소만 같으면 참
    >>> a != {1, 2, 3}
    True
    >>>
    >>> # 세트가 겹치지 않는지 확인
    >>> a = {1, 2, 3, 4}
    >>> a.isdisjoint( {5, 6, 7, 8} )    # 겹치는 요소 없음
    True
    >>>
    >>> a & {5, 6, 7, 8}
    set()
    >>> a
    {1, 2, 3, 4}
    >>>
    >>> a.isdisjoint( {3, 4, 5, 6} )    # a와 3, 4가 겹침
    False

     

    세트 조작
    >>> # 세트 요소 추가
    >>> a = {1, 2, 3, 4}
    >>> a.add(5)
    >>> a
    {1, 2, 3, 4, 5}
    >>>
    >>> # 세트 특정 요소 삭제
    >>> a.remove(3)
    >>> a
    {1, 2, 4, 5}
    >>> a.discard(2)
    >>> a
    {1, 4, 5}
    >>> a.discard(3)
    >>> a
    {1, 4, 5}
    >>>
    >>> # 세트에서 임의의 요소 삭제
    >>> a = {1, 2, 3, 4}
    >>> a.pop()
    1
    >>> a
    {2, 3, 4}
    >>>
    >>> # 세트의 모든 요소 삭제
    >>> a.clear()
    >>> a
    set()
    >>>
    >>> # 세트의 요소 개수 구하기
    >>> a = {1, 2, 3, 4}
    >>> len(a)
    4
    >>>
    >>> a = [1, 2, 2, 3, 4]
    >>> a.pop()    # 마지막 요소 제거
    4
    >>> a.pop()    # 마지막 요소 제거
    3
    >>>
    >>> a = [1, 2, 2, 3, 4]
    >>> a.count(2)    # 값이 2인 요소의 개수
    2
    >>> len(a)        # 리스트 a의 길이(크기)
    5

     

    세트의 할당과 복사
    >>> a = {1, 2, 3, 4}
    >>> b = a
    >>>
    >>> a is b    # 변수 이름만 다를 뿐 같은 객체, 세트 1개
    True
    >>>
    >>> b.add(5)
    >>> a
    {1, 2, 3, 4, 5}
    >>> b
    {1, 2, 3, 4, 5}    # 같은 객체이므로 a와 b 모두 반영됨
    >>>
    >>> a = {1, 2, 3, 4}
    >>> b = a.copy()
    >>>
    >>> a is b
    False
    >>> a == b    # copy로 서로 다른 객체가 됐지만 복사한 요소는 같기 때문에
    True	      # True 출력
    >>>
    >>> b.add(5)
    >>> a
    {1, 2, 3, 4}
    >>> b
    {1, 2, 3, 4, 5}

     

    반복문으로 세트 요소 모두 출력
    >>> a = {1, 2, 3, 4}
    >>> for i in a:
    ...     print(i)
    ...
    1
    2
    3
    4
    >>> # 세트의 요소는 순서가 없으므로 출력할 때마다 달라짐
    >>> # 숫자로만 이루어진 세트는 순서대로 출력됨
    >>>
    >>>
    >>> # for 반복문을 이용해 세트 a를 리스트 형태로 변환
    >>> l = []
    >>> a = {1, 2, 3, 4}
    >>>
    >>> for i in a:
    ...     print(i)
    ...     l.append(i)
    ...
    1
    2
    3
    4
    >>> l
    [1, 2, 3, 4]

     

    세트 표현식 사용
    >>> a = {i for i in 'apple'}
    >>> a
    {'p', 'e', 'l', 'a'}
    >>>
    >>> a = set()    # 빈 집합 만들기
    >>> for i in 'apple':
    ...     a.update(i)
    ...
    >>> a
    {'p', 'e', 'l', 'a'}
    >>>
    >>> # 세트 표현식에 if 조건문 사용
    >>> a = { i for i in 'pineapple' if i not in 'apl' }
    >>> a
    {'i', 'e', 'n'}
    >>> for i in 'pineapple':
    ...     if i not in 'apl':
    ...         print(i)
    ...
    i
    n
    e
    e
    >>>

     

    'Python' 카테고리의 다른 글

    회문 판별과 N-gram 만들기  (0) 2023.10.11
    file  (0) 2023.10.11
    딕셔너리 응용  (0) 2023.10.10
    문자열 응용  (0) 2023.10.10
    2차원 리스트 사용하기  (0) 2023.10.04
Designed by Tistory.