二分查找--bisect

xiaoxiao2021-02-28  94

Bisect模块提供的函数有:

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

查找在有序列表 a 中插入 x 的index。lo 和 hi 用于指定列表的区间,默认是使用整个列表。如果 x 已经存在,在其左边插入。返回值为 index。

bisect.bisect_right(a,x, lo=0, hi=len(a))bisect.bisect(a, x,lo=0, hi=len(a)) :

这2个函数和 bisect_left 类似,但如果 x 已经存在,在其右边插入。

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

在有序列表 a 中插入 x。和 a.insert(bisect.bisect_left(a,x, lo, hi), x) 的效果相同。

bisect.insort_right(a,x, lo=0, hi=len(a))bisect.insort(a, x,lo=0, hi=len(a)) :

和 insort_left 类似,但如果 x 已经存在,在其右边插入。

Bisect 模块提供的函数可以分两类: bisect* 只用于查找 index, 不进行实际的插入;而 insort* 则用于实际插入。该模块比较典型的应用是计算分数等级

def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'): i = bisect.bisect(breakpoints, score) return grades[i] print [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]] 输出:['F', 'A', 'C', 'C', 'B', 'A', 'A'] 实现二分查找:

def binary_search_bisect(lst, x): from bisect import bisect_left i = bisect_left(lst, x) if i != len(lst) and lst[i] == x: return i return None

import bisect a=[2,2,4] ind=bisect.bisect_right(a,3)#left,right都一样 print ind 输出:2 import bisect a=[2,2,4] ind=bisect.bisect_right(a,8) print ind输出:3 import bisect a=[2,2,4] ind=bisect.bisect_right(a,1) print ind输出:0

转载请注明原文地址: https://www.6miu.com/read-39205.html

最新回复(0)