1. Counter
from collections import Counter
list = [1, 1, 2, 3, 3, 4]
print(Counter(list))
# 출력
Counter({1: 2, 3: 2, 2: 1, 4: 1})
- 동일한 자료가 몇 개인지 확인하기 위해 사용되는 함수
- 문자열, 리스트 등에서 element의 개수를 파악하기 쉬움
- Counter의 반환값은 dictionary 형태
most_common(n)
- 입력된 값의 요소들 중 빈도수(최빈값)을 n개 반환
most_common() # 요소 전체를 반환
most_common(2) # 최빈값 상위 2개 반환
most_common(n) # 최빈값 상위 1개 반환
2. bisect
이진탐색을 쉽게 구현할 수 있는 라이브러리
정렬된 리스트에서 값이 특정 범위에 속하는 원소의 개수를 구하고자 할 때 효과적
left_value =< x =< right_value 인 x의 개수를 O(logN)으로 빠르게 계산
- bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 반환
- bisect_right(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 반환
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
print(bisect_left(a, x))
print(bisect_right(a, x))
# 출력
2
4
3. deque
rotate()
from collections import deque
a = [1, 2, 3, 4, 5]
q = deque(a)
q.rotate(2) # 시계 방향 -> 양수, 반시계 방향 음수
# [4, 5, 1, 2, 3]
- 리스트를 회전하는 문제에서 유용!
- rotate(n) - 시계 방향으로 n만큼 회전
- rotate(-n) - 반시계 방향으로 n만큼 회전
4. join
리스트의 element 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환
''.join(리스트)
- ['1', '2', '3'] 리스트를 '123'의 문자열로 합쳐서 반환
'구분자'.join(리스트)
- '_'.join(['1', '2', '3'])은 "1_2_3" 와 같은 형태로 문자열 반환
list = [a,b,c,d,e]
print('\n'.join(list))
# 출력
a
b
c
d
e
5. cominations with replacement (중복조합)
중복 가능한 n개 중에 r개를 선택하는 경우의 수 nHr = n+r-1Cr
from itertools import combinations_with_replacement
arr = [1,2,3]
for i in combinations_with_replacement(arr,3):
print(i, end=" ")
# 출력
(1, 1, 1) (1, 1, 2) (1, 1, 3) (1, 2, 2) (1, 2, 3) (1, 3, 3) (2, 2, 2) (2, 2, 3) (2, 3, 3) (3, 3, 3)
참고 블로그:
[Python] bisect 라이브러리
파이썬에서는 이진 탐색을 쉽게 구현할 수 있도록 bisect 라이브러리를 제공한다. '정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적
velog.io