리스트
- 가변 자료형 + 순서 유지
- 동적 배열
- C ++ : std::vector
- 자바 : ArrayList
- 파이썬 리스트를 사용하면 stack을 사용할 지, queue를 사용할 지 고민할 필요 없다! 리스트에서 다 할 수 있다.
- 리스트에서 첫 번째 요소 꺼내는 데 O(n) (전체복사가 필요하므로)-> deque 활용하여 성능 개선 가능하다.
- 리스트에서 sort -> timsort 사용하여 O(nlogn)
- 리스트 기능
- append
- indexing
- slicing
- del (index 활용하여 제거)
- remove (value 활용하여 제거)
- pop
- ...
- 리스트 특징
- 객체를 가리키는 포인터들이 연속된 메모리 공간에 존재
- 각 객체는 불연속된 메모리 공간에 존재
- -> 배열과 연결 리스트의 장점을 취할 수 있다!
- 탐색 시, 포인터의 위치를 찾아가서 값을 비교해야 하므로 속도가 느리다는 단점이 있다.
딕셔너리
- 키, 값 구조로 이루어진 자료구조
- 입력순서가 유지 (파이썬 3.7 이상부터)
- 그 이하인 경우 collections.OrderedDict 를 사용
- collections.Counter() : 요소의 값을 key로 하고, 그 개수를 value로 만들어준다
- 내부적으로는 해쉬 테이블로 구현
- C++ : std::unordered_map
- 키 조회 성능 : O(1)
- 키 삽입 성능 : O(1)
- 키 리턴 성능 : O(1)
- 딕셔너리 기능
- key in dict
- items() -> key, value
- del dict[key]
- collections.defaultdict()
- 존재하지 않는 키를 조회할 경우, 에러를 발생하는 대신 디폴트 값을 기준으로 해당 키에 대한 아이템을 생성
- collections.Counter()
- 아이템에 대한 개수를 계산하여 딕셔너리로 리턴
- key - 아이템의 value
- value - 아이템의 개수
- most_common()을 사용하여 빈도가 높은 key를 추출할 수 있다.
- collections.OrderedDict()
- 입력순서가 유지되는 딕셔너리
- 파이썬 3.7 이상의 버전부터는 기본 딕셔너리에서도 입력 순서가 유지된다.
'다전공_컴퓨터공학 > 자료구조, 알고리즘' 카테고리의 다른 글
[자료구조] 우선순위 큐 (priority queue) (0) | 2020.12.20 |
---|---|
[자료구조] 데크 (double ended queue) (0) | 2020.12.20 |
[자료구조] 스택(Stack), 큐(Queue) (0) | 2020.11.25 |
[자료구조] 연결 리스트 (linked list) (0) | 2020.11.18 |
[자료구조] 배열 (array) (0) | 2020.11.13 |