bisect 모듈을 이용한 가까운 값 찾기
728x90
# bisect 모듈을 이용해서 가까운 값 찾기
import bisect
import random
def find_closest(haystack, needle):
# bisect.bisect_left는 haystack에서 needle보다 크거나 같은
# 첫 번째 값의 위치를 반환한다.
i = bisect.bisect_left(haystack, needle)
if i == len(haystack):
return i - 1
elif haystack[i] == needle:
return i
elif i > 0:
j = i - 1
# 여기서, i번째 값은 needle보다 크므로(반대로 j번째 값은 needle보다 작다)
# i번째 값과 j번째 값 중 어떤 값이 needle에 가까운지 비교하기 위해
# 절대값을 사용할 필요가 없다.
if haystack[i] - needle > needle - haystack[j]:
return j
return i
important_numbers = []
for i in range(10):
new_number = random.randint(0, 1000)
bisect.insort(important_numbers, new_number)
# bisect.insort로 추가했기 때문에 important_numbers는 정렬된 상태로 추가되었다.
print("Haystack: ", important_numbers)
closest_index = find_closest(important_numbers, -250)
print("Closest value to -250: ", important_numbers[closest_index])
closest_index = find_closest(important_numbers, 500)
print("Closest value to 500: ", important_numbers[closest_index])
closest_index = find_closest(important_numbers, 1100)
print("Closest value to 1100: ", important_numbers[closest_index])
bisect.left는 첫번째 인자에서 2번째 인자보다 크거나 같은 첫 번째 값을 return합니다.
bisect.insort는 정렬을 유지한채 값을 추가합니다.
728x90
'Python > python - pythonic' 카테고리의 다른 글
메서드타입 - class method (0) | 2020.11.27 |
---|---|
제너레이터를 이용한 지연 실행 (0) | 2020.11.25 |
파이썬에서 효율적으로 피보나치 수열 접근하기 (0) | 2020.11.25 |
ctyhon - cProfile 모듈 사용하기 (0) | 2020.11.24 |
python 으로 루트 제곱근 구하기 (0) | 2020.10.18 |
댓글
이 글 공유하기
다른 글
-
제너레이터를 이용한 지연 실행
제너레이터를 이용한 지연 실행
2020.11.25 -
파이썬에서 효율적으로 피보나치 수열 접근하기
파이썬에서 효율적으로 피보나치 수열 접근하기
2020.11.25 -
ctyhon - cProfile 모듈 사용하기
ctyhon - cProfile 모듈 사용하기
2020.11.24 -
python 으로 루트 제곱근 구하기
python 으로 루트 제곱근 구하기
2020.10.18