Python Basic 12 | set

devheyrin·2022년 1월 10일
0

python basic

목록 보기
12/19

set() 란?

파이썬이 제공하는 집합을 표현하는 자료형이다. set 를 사용하면 합집합, 교집합, 차집합 등의 연산이 가능하다.

set 만들기

nations = {'korea', 'usa', 'japan', 'france', 'uk', 'korea'}
print(nations)  # {'korea', 'japan', 'uk', 'usa', 'france'}

a = set('strawberry')
print(a)  # {'w', 't', 's', 'a', 'e', 'b', 'y', 'r'}

b = set(range(5))
print(b)  # {0, 1, 2, 3, 4}

c = set([1,2,3,4,5,6,1,2,3,5,7,8,9])
print(c)  # {1, 2, 3, 4, 5, 6, 7, 8, 9}

d = frozenset(range(10))
print(d)  # frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

set 의 특징

  • 엘리먼트의 순서가 정해져 있지 않아서 출력할 때마다 다른 순서로 출력된다.
  • 세트에 들어가는 엘리먼트는 중복될 수 없다.
  • 대괄호로 특정 엘리먼트만 출력할 수 없다. ex) nations[0], nations['korea'] 불가능
  • set(반복가능한 객체) 로 세트를 만들 경우, 중복되지 않는 문자만 세트로 만들어진다.
  • 세트 안에 세트를 만들 수 없다. (단, frozenset를 활용하면 가능)
  • 내용을 변경할 수 없는 세트(frozenset)도 만들 수 있다. 이를 활용해 중첩된 세트를 만들 수 있다.
    # 예시 
    a = frozenset({frozenset({1, 2}), frozenset({3, 4})})

특정 엘리먼트의 존재유무 확인하기

nations = {'korea', 'usa', 'japan', 'france', 'uk', 'korea'}
print(nations)  # {'korea', 'japan', 'uk', 'usa', 'france'}
print('korea' in nations)  # True
print('japan' not in nations)  # False

집합 연산

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# 합집합
print(a | b)
print(set.union(a, b))  # {1, 2, 3, 4, 5, 6}

# 교집합
print(a & b)
print(set.intersection(a, b))  # {3, 4}

# 차집합 
print(a - b)
print(set.difference(a, b))  # {1, 2}

# 대칭차집합 (합집합 - 교집합) 
print(a ^ b)
print(set.symmetric_difference(a, b))  # {1, 2, 5, 6}

집합 연산 후 할당 연산

합집합 후 할당

a = {1, 2, 3, 4}

a |= {5}
print(a)  # {1, 2, 3, 4, 5}

a = {1, 2, 3, 4}
a.update({5})
print(a)  # {1, 2, 3, 4, 5}

교집합 후 할당

a = {1, 2, 3, 4}

a &= {0, 1, 2, 3, 4, 5}
print(a)  # {1, 2, 3, 4}

a = {1, 2, 3, 4}
a.intersection_update({0, 1, 2, 3, 4, 5})
print(a)  # {1, 2, 3, 4}

차집합 후 할당

a = {1, 2, 3, 4}

a -= {3}
print(a)  # {1, 2, 4}

a = {1, 2, 3, 4}
a.difference_update({3})
print(a)  # {1, 2, 4}

대칭차집합 후 할당

a = {1, 2, 3, 4}

a ^= {3, 4, 5, 6}
print(a)  # {1, 2, 5, 6}

a = {1, 2, 3, 4}
a.symmetric_difference_update({3, 4, 5, 6})
print(a)  # {1, 2, 5, 6}

부분집합과 상위집합 확인하기

a = {1, 2, 3, 4}

# 현재세트가 다른세트의 부분집합인지 확인 
print(a <= {1, 2, 3, 4})  # True
print(a.issubset({1, 2, 3, 4, 5}))  # True

# 현재세트가 다른세트의 진부분집합인지 확인 
print(a < {1, 2, 3, 4, 5})  # True
print(a < {1, 2, 3, 4})  # False

# 현재세트가 다른세트의 상위집합인지 확인 
print(a >= {1, 2, 3, 4})  # True
print(a.issuperset({1, 2, 3, 4}))  # True

# 현재세트가 다른세트의 진상위집합인지 확인
print(a > {1, 2, 3, 4})  # False
print(a > {1, 2, 3})  # True

# 세트가 서로 같은지 확인
print(a == {1, 2, 3, 4})  # True
print(a == {4, 3, 2, 1})  # True

# 세트가 서로 다른지 확인
print(a != {1, 2, 3})  # True
print(a != {4, 3, 2, 1})  # False

# 겹치는 요소가 있는지 확인
print(a.isdisjoint({5, 6, 7, 8}))  # True
print(a.isdisjoint({3, 4, 5, 6}))  # False 

세트에 요소를 추가, 삭제

a = {1, 2, 3, 4}

# 세트에 요소 추가하기
a.add(5)
print(a)  # {1, 2, 3, 4, 5}

# 세트에서 요소 삭제, 요소가 없으면 에러 발생
a.remove(3)
print(a)  # {1, 2, 4, 5}

# 세트에서 특정 요소를 삭제하고 없으면 pass
a.discard(2)
print(a)  # {1, 4, 5}

# 세트에서 임의의 요소 삭제
a.pop()
print(a)  # {4, 5}

# 세트의 모든 요소 삭제
a.clear()
print(a)  # set()

세트의 길이 구하기

a = {1, 2, 3, 4}

# 세트의 요소 개수(길이) 구하기 
print(len(a))

세트의 복사

a = {1, 2, 3, 4}
b = a.copy()
print(a is b)  # False
print(a == b)  # True
b.add(5)
print(b)  # {1, 2, 3, 4, 5}
print(a)  # {1, 2, 3, 4}

반복문으로 세트의 요소 출력

a = {1, 2, 3, 4}
for i in a:
    print(i, end=' ')

# 1 2 3 4 

세트 표현식 사용하기

a = {i for i in 'apple'}
print(a)  # {'a', 'l', 'e', 'p'}
b = {i for i in 'pineapple' if i not in 'apl'}  # a, p, l 이 아닌 경우에만 세트로 생성
print(b)
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글