Defaultdict
from collections import defaultdict
counter = defaultdict(int)
기본 dict는 해당 키 값이 있는지 없는지 확인을 해야 한다. ex) if 2 not in dict: dict[2] =0 , 하지만 defaultdict는 위의 코드처럼 생성자를 사용해 매개 변수를 주면 들어오는 값이 존재하지 않으면 알아서 0으로(매개변수에 int를 주었기 때문에) 초기화된다. 아무 값을 저장하지 않고 counter[1]을 출력하면 0이 나온다. 매개변수에 list 등도 줄 수 있다.
Counter
from collections import Counter
counter = Counter(l)
l 리스트의 원소들의 수를 카운트해서 딕셔너리로 저장한다. l = ['a', 'p', 'p', 'l', 'e']일 경우 counter['p']를 출력하면 2가 나온다.
bisect
from bisect import bisect_left, bisect_right, bisect, insort
l = [1,2,2,3,3,3,4,5]
a = bisect(l,2)
b = bisect_left(l,2)
c = bisect_right(l,3)
# a = 3, b = 1, c = 6
이진 탐색을 도와준다. 그러므로 정렬이 된 리스트를 사용해야한다. 적절한 위치의 인덱스를 출력해 준다. 위의 코드에서 a는 2와 같은 값의 가장 오른쪽의 옆 인덱스 값인 3을 출력해 준다. bisect_left는 같은 숫자의 시작 점인 인덱스를 반환해 주므로 b = 1. bisect와 bisect_right는 동일하게 동작한다. 그러므로 c는 3과 같은 값의 가장 오른쪽(인덱스 5) 한 칸 옆 인덱스 6을 반환해 준다.
이걸 이용해 bisect_right(l,2) - bisect_left(l,2)를 이용해 l에 2가 몇 개 있는지 찾을 수 있다.
또한 insort(l,4)를 하면 l에 4를 적절한 위치에 삽입해준다.
728x90
반응형
'Algorithm' 카테고리의 다른 글
에라토스테네스의 체(소수 구하기) (0) | 2023.07.25 |
---|---|
최단 경로 알고리즘 (다익스트라 알고리즘, 플로이드 워셜 알고리즘) (0) | 2023.07.24 |
선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 (0) | 2023.06.19 |
BFS, DFS (너비 우선 탐색, 깊이 우선 탐색) (3) | 2023.06.18 |
[Python] 알고리즘을 위한 문법 복습 - map(), filter(), set() (0) | 2022.08.11 |