None
숫자
실수 (class float) 정수 - 정수 (class int) - 불리언 (class bool)
시퀀스
불변 - 문자열 (class str) : 참조값은 변할 수 있지만 원래 선언한 값은 없어지지 않음 - 튜플 (class tuple) - 바이트 (class bytes) ㅤ 가변 - 리스트 (class list)
집합형
- 집합 (class set)
매핑
- 딕셔너리 (class dict)
원시 객체
C 원시타입
Java 원시타입 + 객체
Python 객체
불변객체?
bool O
int O
float O
list X
tuple O
str O
set X
dict X
is 와 =
a = [1,2,3] a == a ㅤ a == list(a) (O) a is a (O) a is list(a) (X) // 값은 같지만 list로 묶어주면 별도의 객체로 복사되고 다른 ID를 갖게됨
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
리스트의 주요 연산 시간 복잡도
len(a) O(1) a[i] O(1) a[i:j] O(k) elem in a O(n) a.count(elem) O(n) a.index(elem) O(n) a.append(elem) O(1) a.pop() O(1) a.pop(0) O(n) del a[i] O(n) a.sort() O(n log n) min(a), max(a) O(n) a.reverse() O(n) -> Deque 로 성능 높일 수 있음 (나중에)
list 활용
선언
a = list() a = [] a = [1,2,3] ㅤ a.insert(3,5) //인덱스 3에 5삽입 숫자 외에도 다양한 자료형 삽입 가능
슬라이싱
a[1:3] a[:3] a[4:] a[1:4:2] // 두 칸씩 건너서 슬라이싱
IndexError 예외처리방법
try: print(a[9]) except IndexError: print(‘존재하지 않는 인덱스’)
추가
+list del[1] // 해당 인덱스에 있는 값 삭제 +list.remove(3) // 해당 값 삭제 +list.pop(3) // 해당 인덱스에 있는 값 return하고 삭제
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
len(a) : 요소 개수 리턴 a[key] : 키를 조회하여 값 리턴 a[key] = value : 키/값 삽입 key in a : 딕셔너리에 키가 존재하는지확인 -> 모두 O(1)
3.6이하는 입력순서 유지 X
-> collections.OrderedDict()
-> collections.defaultdict()
-> collections.Counter()
선언
a = dict() a = {} a = {‘key1’ : ‘value1’, ‘key2’ : ‘value2’} a[‘key3’] = ‘value3’
딕셔너리 예외처리
try : print(a[‘key4’] except KeyError : print(‘존재하지 않는 키’)
or
if ‘key4’ in a: print(‘존재’) else: print(‘존재X’)
딕셔너리 조회
for k,v in a.items(): print(k,v)
삭제
del a[‘key1’]
딕셔너리 모듈
1) default 객체
a = collections.defaultdict(int) a[‘A’] = 5 a[‘B’] = 4 a[‘C’] += 1 // 원래 C는 존재하지 않는 key이지만 defaultdict 으로 0설정, +1값 저장
2) Counter 객체
a = [1,2,3,4,5,5,5,6,6] b = collections.Counter(a) key 아이템 값 value 아이템 개수 딕셔너리 생성 * 이때 빈도가 높은 값 추출 하려면 b.most_common(2) // 빈도 높은 값 2개 -> [(5,3), (6,2)]
3) OrderedDict 객체
collections.OrderedDict (a) 입력순서 유지