te___ho
NO RULES
te___ho
전체 방문자
오늘
어제
  • 분류 전체보기 (92)
    • 주니어의 개발일지 (1)
    • My project (29)
      • High Traffic Lab (5)
      • Nanaland in Jeju (8)
      • Univey (3)
      • inflearn_clone? (13)
    • Spring (19)
    • Network & CS (9)
    • Java (1)
    • Front_End (8)
    • Algorithm (11)
    • ETC (6)
    • Scribble (8)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
te___ho

NO RULES

Algorithm

Defaultdict, Counter, bisect

2023. 6. 20. 15:36

 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
최단 경로 알고리즘 (다익스트라 알고리즘, 플로이드 워셜 알고리즘)  (2) 2023.07.24
선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬  (0) 2023.06.19
BFS, DFS (너비 우선 탐색, 깊이 우선 탐색)  (6) 2023.06.18
[Python] 알고리즘을 위한 문법 복습 - map(), filter(), set()  (0) 2022.08.11

    티스토리툴바