본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 18. 자료형 분류와 set & frozenset

출처 : 윤성우의 열혈 파이썬 : 중급

18. 자료형 분류와 set & frozenset

  • 시퀀스 타입(sequence type)
    • list, tuple, range, string
    • 저장된 값의 순서 정보가(위치 정보가) 존재
    • 인덱싱 연산 : s[0], s[1] ...
    • 슬라이싱 연산 : s[0:3], s[5:9]
  • 매핑 타입(mapping type)
    • set, frozenset
    • 저장된 값의 순서 또는 위치 정보를 기록하지 않는 자료형
    • 수학의 '집합'을 표현한 자료형
    • '수학의 집합은 저장 순서를 유지하지 않는다'
    • '수학의 집합은 중복된 값의 저장을 허용하지 않는다'

set, frozenset

A = {'a', 'c', 'd', 'f'}
B = {'a', 'b', 'd', 'e'}

A - B   # A에 대한 B의 차집합
A & B   # A와 B의 교집합
A | B   # A와 B의 합집합
A ^ B   # A와 B의 대칭 차집합
A = set(['a', 'c', 'd', 'f'])
B = set('fdca')

A == B
'a' in A
'b' not in A
for c in A & B:
    print(c, end = ' ')

empty set 생성

d = {}
type(d) # dict

s = set()
type(s) # set
  • 위의 모든 내용은 frozenset을 대상으로도 동일하게 적용

set 변경 가능, frozenset 변경 불가

os = {1, 2, 3, 4, 5}
os.add(6)
os.discard(1)
os.update({7, 8, 9})
os &= {2, 4, 6, 8}
os -= {2, 4}
os ^= {1, 3, 6}
  • set : mutable 객체
  • frozenset : immutable 객체
  • 기존에 존재하던 객체의 값을 수정하는 연산(또는 메소드 호출)은 set을 대상으로만 할 수 있다

set comprehension

s1 = {x for x in range(1, 11)}
s2 = {x**2 for x in s1}
s3 = {x for x in s2 if x < 50}