python bisect模块

bisect 是python的一个二分查找算法模块,可以在已排序的列表等序列容器中查找与插入值。

函数集:

(1)bisect.bisect_left(a,x, lo=0, hi=len(a))

如果x在a中,该函数会返回x的位置,如果不在,那么返回最后一个小于x的值的位置。(lo 与 hi 用于设定查找的子列表)

a = [0,1,2,3,4,5,6,7,8]
bisect.bisect_left(a,4) # 返回4
a = [0,1,2,3,4,6,7,8]
bisect.bisect_left(a,4) # 返回4
bisect.bisect_left(a,4,3,8) #在下标区间[3,8]中查找 返回依然是4

 
 该方法主要是查找已排序的list中,某个值插入的位置(因为不能破坏排序性质) 


(2)bisect.bisect_right(a,x,lo=0,hi=len(a))  与 bisect.bisect(a, x, lo=0, hi=len(a)) (两个函数一样)

作用与(1)类似,但是此方法对于x在a中时返回该值右边第一个位置。

a = [0,1,2,3,4,5,6,7,8]
bisect.bisect_left(a,4) #返回 5

(3)bisect.insort_left(a, x, lo=0, hi=len(a))

先调用bisect.bisect_left找到插入位置,再插入x。(如果x在a中,新插入的x正好在原来的x的左边)

a = [0,1,2,3,4,5,6,7,8]
bisect.insort_left(a,4) #a = [0,1,2,3,4(插入),4,5,6,7,8]
(4) bisect. insort_right ( a, x, lo=0, hi=len(a) ) bisect. insort ( a, x, lo=0, hi=len(a) )
与(3)类似,只是此时当x存在与a中时,插在x的右边。

a = [0,1,2,3,4,5,6,7,8]
bisect.insort_right(a,4) #a = [0,1,2,3,4,4(插入),5,6,7,8]


该模块源代码是python写的,同时要求list的已经排序好的,在某些需要速度的场合可能会用的到。

list对象的某些方法其实可以起到有同样的功能,比如insert(x)返回下标。in 关键字也可以判断x是否在特定的list中,而管理有序集合也有heapq等高效的模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值