Python 模块学习——bisect

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值