자료형 분류와 set & frozenset

김건우·2021년 12월 22일
0

파이썬

목록 보기
18/18
post-thumbnail

자료형 분류

시퀀스 타입(sequence type)

  • 리스트 : list 클래스의 객체
  • 튜플 : tuple 클래스의 객체
  • 레인지 : range 클래스의 객체
  • 문자열 : str 클래스의 객체
문자열의 경우 텍스트 시퀀스 타입(text sequence type)이라 부르지만,
이 역시 시퀀스 타입의 일종이다.

시퀀스 타입은 저장된 값의 순서 정보(위치 정보)가 존재한다는 특징이 있다.

대상으로 할 수 있는 연산

  • 인덱싱 연산 : 특정 값 하나를 참조하는 연산
s[0], s[1], s[2]
  • 슬라이싱 연산 : 시작과 끝을 정하여 이를 참조하는 연산
s[0:3], s[5:9]

매핑 타입(mapping type)

  • 딕셔너리 : dict 클래스의 객체
    매핑 타입은 저장된 값의 순서 또는 위치 정보를 기록하지 않는 자료형이다.
    따라서 인덱싱이나 슬라이싱 연산이 불가능하다.

셋 타입(set type)

  • 셋(set) : set 클래스의 객체
  • 프로즌셋 : frozenset 클래스의 객체
    '집합'을 표현한 자료형
    저장 순서를 유지하지 않으며, 중복된 값의 저장을 허용하지 않는다.

set, frozenset
기본 연산

  • 합집합 : 두 집합의 모든 원소들을 합한 집합

  • 차집합 : 한 집합에서 다른 한 집합이 갖는 원소들을 뺀 집합

  • 교집합 : 두 집합에 공통으로 존재하는 원소들의 집합

  • 대칭 차집합 : 두 집합의 합집합에서 교집합을 뺀 집합

    A = {'a', 'c', 'd', 'f'}
     B = {'a', 'b', 'd', 'e'}
    A - B		# A에 대한 B의 차집합
    > {'c', 'f'}
    A & B 		# A와 B의 교집합
    > {'d', 'a'}
    A | B 		# A와 B의 합집합
    > {'e', 'f', 'd', 'a', 'b', 'c'}
    a ^ B 		# A와 B의 대칭 차집합
    > { 'e', 'f', 'b', 'c' }

    예제와 같이 { } 을 사용하여 집합을 사용할 수 있다.
    set

    A = set(['a','c','d','f'])	# set 함수에 iterable 객체 전달해서 set 생성
     B = set('fdca')			# 문자열도 iterable 객체이므므로 set 생성 가능
     A=B		# 내용 비교
    > False
     'a' in A	
    > True
     'b' not in A
     True
     for c in A & B:
     	print(c, end = ' ')
    > d c f a

    딕셔너리와 동일하게 보일 수 있으나,
    해당 { } 안에서 키-벨류 형태면 딕셔너리가 된다.

    d = {}
    type(d)
    > <class 'dict'>
    s = set()
    type(s)
    > <class 'set'>

    Frozenset

    A = frozenset(['a','c','d','f'])	# frozenset 함수에 iterable 객체 전달해서 frozenset 생성
    B = frozenset(['a', 'b', 'd', 'e'])			# 문자열도 iterable 객체이므므로 frozenset 생성 가능
    A - B
    > frozenset({'c', 'f'})
    A | B
    frozendset({'e', 'f', 'd', 'a', 'b', 'c'})
    A=B		# 내용 비교
    > False
    'a' in A	
    > True
    'b' not in A
    True
    for c in A & B:
    	print(c, end = ' ')
    > d a 

    set type의 특성중 중복을 허용하지 않는 특성을 활용한 결과.

    t = [3, 3, 3, 7, 7, 'z', 'z']
    t = list(set(t))
    > [3, 'z', 7]

set과 frozenset의 차이

  • set : mutable 객체

  • frozenset : immutable 객체

    즉, set은 새로운 값의 추가 또는 삭제가 가능하지만, frozenset은 불가능하다.

set의 연산

  • add : 원소 추가
  • discard : 원소 삭제
  • update, |= : 다른 집합의 원소 전부 추가
  • intersection_update, &= : 다른 집합과 공통으로 있는 원소만 남기기
  • difference_update, -= : 다른 집합이 갖는 원소 모두 삭제
  • symmetric_difference_update, ^= : 공통으로 갖지 않는 것들은 추가하고 나머지는 삭제
os = {1, 2, 3, 4, 5}
os.add(6)		# 추가
> {1, 2, 3, 4, 5, 6}
os.discard(1)		# 삭제
> {2, 3, 4, 5, 6}
os.update({7, 8, 9})	# 전부 추가
> {2, 3, 4, 5, 6, 7, 8, 9}
os &= {2, 4, 6, 8}	# 교집합
> {8, 2, 4, 6}
os -= {2, 4}		# 차집합
> {6, 8}
os ^= {1, 3, 6}		# 대칭 차집합
> {1, 3, 8}

set 컴프리헨션

s1 = {x for x in range(1, 11)}
> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
s2 = {x**2 for x in s1}
> {64, 1, 4, 36, 100, 9, 16, 49, 81, 25}
s3 = {x for in s2 if x < 50}
> {1, 4, 36, 9, 16, 49, 25}

set type은 순서를 유지하지 않는 특성.

profile
공부하는 개발자가 목표입니다.

0개의 댓글