Python 模块学习——bisect

  • Post author:
  • Post category:python


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



版权声明:本文为lekusun9671原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。