본문 바로가기

책 요약 정리/파이썬 알고리즘 인터뷰

5장 _ 리스트, 딕셔너리 요약정리

리스트 : 순서대로 저장하는 시퀸스, 변경 가능한 목록을 말한다.  입력 순서가 유지되며, 내부적으로는 동적 배열로 구현되어 있다. 

 

연산 시간복잡도 설명
len(a) O(1) 전체 요소의 개수 리턴
a[i] O(1) 인덱스의 i의 요소 가져오기 
a[i:j] O(k) i~j 까지 슬라이스 길이만큼 k개의 요소를 가져온다. 
i in a O(n) i 요소가 존재하는지 확인한다. 처음부터 순차 탐색하는 경우이다. 
a.count(i) O(n) i 요소의 개수를 리턴한다. 
a.index(i) O(n) i 요소의 인덱스를 리턴한다. 
a.append(i) O(1) 리스트 마지막에 i 요소를 추가한다. 
a.pop() O(1) 리스트 마지막 요소를 추출한다. 스택 연산
a.pop(0) O(n) 리스트 첫번째 요소를 추출한다. 큐의 연산 
del a[i] O(n) i에 따라 다르다. 최악의 경우 O(n) 
a.sort() O(n log n) 정렬한다. 팀소트를 사용하며, 최선의 경우 O(n)에서도 실행될 수 있다.
min(a), max(a) O(n) 최솟값/최댓값 계산을 위해서는 전체를 선형탐색 해야한다. 
a.reverse() O(n) 리스트를 뒤집는다. 리스트의 입력순서는 유지된다. 

 

a.insert(3,5) : 특정위치의 인덱스를 지정하여 요소를 추가 

A [a:b:c] : 슬라이싱으로 a는 처음 인덱스, b는 끝 인덱스, c는 step으로 a부터 b-1까지의 요소들을 c스탭으로 추출한다. 

 

del a [1] : 1번 인덱스의 값을 삭제 : 인덱스에 해당하는 요소 삭제

a.remove(1): 1 값을 삭제 : 값에 해당하는 요소 삭제 

pop(인덱스): 삭제될 값을 리턴하고 삭제가 진행 

 

리스트는 다양한 타입을 동시에 관리할 수 있다. 

[1, '안녕', 'True']

 

딕셔너리 :  키/값 구조로 이루어져 있다. 입력 순서가 유지되며, 내부적으로는 해시 테이블로 구현되어 있다. 

 

연산 시간복잡도 설명
len(a) O(1) 요소의 개수를 리턴한다.
a[key] O(1) 키를 조회하여 값을 리턴한다.
a[key] = value O(1) 키/값을 삽입한다.
key in a O(1) 딕셔너리에 키가 존재하는지 확인한다. 

 

itmes() : 딕셔너리에 있는 키/값을 for 반복문을 통해 각각 꺼내올 수 있다. 

for k,v in a.itmes():
    print(k,v)

del a ['key1'] : 딕셔너리 키 값 삭제 

 

딕셔너리 모듈 

 

defaultdict 객체

defaultdict 객체는 존재하지 않는 키를 조회할 경우 , 에러 메시지를 출력하지 않고 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다. collections.defaultdict 클래스를 가진다. 

>>> a = collections.defaultdict (자료형)

 

Counter 객체 

Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다. 

>>> c=[1, 2, 3, 4, 5, 5, 5, 6, 6]

>>> b = collections.Counter(c)

>>> b

Counter({5:3, 6:2, 1:1, 2:1, 3:1, 4:1,})

키에는 아이템의 값이 , 값에는 해당 아이템의 개수가 들어간 딕셔너리를 생성한다. 

 

b.most_common() :  가장 빈도 수가 높은 요소를 추출한다.