[Book Review] Python Algorithm Interview (2)

Tony Kim·2021년 10월 4일
0
post-thumbnail

[Book Review] Python Algorithm Interview (2)

1. 파이썬 자료형

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를  갖게됨




2. List

리스트의 주요 연산 시간 복잡도

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하고 삭제




3. Dictionary

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)
입력순서 유지
profile
Back-end-dev

0개의 댓글