Python 中bisect用法说明

Python 中bisect用法说明

bisect是python内置模块,用于有序序列的插入和查找。

  • 查找:
    • bisect(array, item)
    • bisect_left(array, item)
    • bisect_right(array, item)
  • 插入:
    • insort(array,item)
    • insort_left(array,item)
    • insort_right(array,item)

1.查找

import bisect
arr = [1,3,3,6,8,12,15]
value = 3
idx_left=bisect.bisect_left(arr,value)
print(idx_left)
idx_right=bisect.bisect_right(arr,value)
print(idx_right)
# 用可变序列内置的insert方法插入
arr.insert(idx_left,value)
print(arr)

输出:

1

3

1,3,3,3,6,8,12,15

**NOTE:**left和不带left的用法的区别是:当插入的元素和序列中的某一个元素相同时,该插入到该元素的前面(左边,left),还是后面(右边);如果是查找,则返回该元素的位置还是该元素之后的位置。

2.插入

使用bisect.insort,比bisect先查找该插入哪个位置,再用insert方法插入更加快速的方法

import bisect
 
a = [1,4,6,8,12,15,20]
bisect.insort(a,13)
print(a)

[1,4,6,8,12,13,15,20]

3.使用举例

Leetcode-315题一种解决方案

class Solution:
    def countSmaller(self, nums: List[int]) -> List[int]:
        n=len(nums)
        result=[0]*n
        sorted_nums=[]
        for i in range(n-1,-1,-1):
            idx = bisect.bisect_left(sorted_nums,nums[i])
            sorted_nums.insert(idx,nums[i])
            result[i] = idx
        return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值