DATA101
[파이썬] 이진 탐색 구현을 도와주는 bisect 라이브러리에 대해 알아보자! 본문
안녕하세요, 오늘은 파이썬에서 이진 탐색(Binary Search) 구현을 도와주는 bisect 라이브러리에 대해 알아봅니다.
이진 탐색에 대한 자세한 내용은 아래 링크를 참고해 주세요 :)
[알고리즘] 이진 탐색(Binary Search)에 대해 알아보자!(+Python 구현)
안녕하세요, 오늘은 이진 탐색(Binary Search) 알고리즘에 대해 알아보겠습니다. 그럼 바로 시작하죠! 목차 1. 이진 탐색이란? 2. 이진 탐색의 동작 과정 3. 이진 탐색의 시간 복잡도 4. 이진 탐색 구현
heytech.tistory.com
bisect 라이브러리란?
bisect 라이브러리는 원소들이 정렬된 리스트에서 특정 원소를 찾을 때 효과적입니다. bisect 라이브러리는 아래 2가지 함수가 가장 중요합니다.
(1) bisect_left(list, data): 리스트에 데이터를 삽입할 가장 왼쪽 인덱스를 찾는 함수(리스트 내 정렬 순서를 유지).
(2) bisect_right(list, data): 리스트에 데이터를 삽입할 가장 오른쪽 인덱스를 찾는 함수(리스트 내 정렬 순서를 유지).
예를 들어, 그림 1 과 같이 a라는 리스트

위의 예제를 파이썬으로 구현하면 다음과 같습니다.
from bisect import bisect_left, bisect_right
a = [1, 2, 3, 3, 5, 10]
x = 3
print(f"bisect_left: {bisect_left(a, x)}") # 2
print(f"bisect_right: {bisect_right(a, x)}") # 4
이와 같은 두 함수의 특성 덕분에 bisect_left()와 bisect_right()는 원소들이 정렬된 리스트에서 특정 범위 내에 속하는 특정 값의 개수를 구할 때 효과적이며
from bisect import bisect_left, bisect_right
# [left_v, right_v] 범위 내에 있는 원소 개수 출력 함수
def cnt_within_range (arr, left_v, right_v):
# 맨 좌측 인덱스
left_idx = bisect_left(arr, left_v)
# 맨 우측 인덱스
right_idx = bisect_right(arr, right_v)
return right_idx - left_idx
# 리스트 생성
arr = [5, 6, 7, 7, 7, 7, 8, 8, 9, 10]
# 값이 9인 원소 개수 출력
print(cnt_within_range(arr, 9, 9)) # 1
# [4, 7] 범위 내에 있는 원소 개수 출력
print(cnt_within_range(arr, 4, 7)) # 6
포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐거운 하루 보내시길 바랍니다 :)
고맙습니다.
'SW 개발 > Python' 카테고리의 다른 글
[파이썬] 팩토리얼, 제곱근, 최대 공약수, 최소 공배수, 파이, 자연상수 계산하기(feat. math 라이브러리)! (0) | 2021.04.24 |
---|---|
[파이썬] Counter 함수: 리스트 내 원소 개수 구하기!(feat. collections 라이브러리) (0) | 2021.04.23 |
[파이썬] 순열, 조합, 중복 순열, 중복 조합 계산하기!(feat. itertools 라이브러리) (0) | 2021.04.21 |
[파이썬] f-string 문법에 대해 알아보자! (0) | 2021.04.20 |
[파이썬] 집합(Set) 자료형에 대해 알아보자! (0) | 2021.04.19 |