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