자료형 분류
시퀀스 타입(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' }
예제와 같이 { } 을 사용하여 집합을 사용할 수 있다.
setA = 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은 순서를 유지하지 않는 특성.