Python 模組學習——bisect
阿新 • • 發佈:2018-12-08
bisect是一個排序模組,操作物件必須為排好序的列表。
insort()函式:
在不影響排序的情況下插入元素。
bisect()函式:
找出在不影響排序的情況下元素應該插入的位置,但不會插入元素
可以看出6並沒有被插入列表d中
bisect_left 和 bisect_right 函式:
處理插入重複元素的情況,bisect_left()在列表中有與待插入元素重複的元素時,會返回將該元素插入到相同元素左邊的下標值,也就是該元素在列表中的位置;bisect_right()返回將該元素插入列表中相同元素後面的下標值,也就是該元素在列表中的位置+1.
可以看出在列表中沒有待插入元素時,正常插入即可;列表中有多個待插入元素時,返回的下標值為所有待插入元素之前(或之後)
insort_left 和 insort_right函式:
該操作會直接將元素插入所有與待插入元素相同的元素之前或之後。
看起來沒有什麼差別,但其實插入位置與bisect是對應的。
在leetcode上刷題時看到這個模組,才剛開始瞭解,所以把題也一起放上來。
參考別人的程式碼:
import bisect class Solution(object): def findRadius(self, houses, heaters): """ :type houses: List[int] :type heaters: List[int] :rtype: int """ heaters.sort() r = 0 for h in houses: ind = bisect.bisect_left(heaters, h) if ind == len(heaters): r = max(r, h - heaters[-1]) elif ind == 0: r = max(r, heaters[0] - h) else: r = max(r, min(heaters[ind] - h, h - heaters[ind - 1])) return r