python二分查找模块bisect

bisect模块用于二分查找,非常方便。

Bisect模块提供的函数有:

(1)查找

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

查找在有序列表a中插入x的index。lo和hi用于指定列表的区间,默认是使用整个列表。

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

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

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

(2)插入

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

在有序列表a中插入x。如果x已经存在,在其左边插入。返回值为index。 和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已经存在,在其右边插入。

时间: 2024-10-13 16:15:27

python二分查找模块bisect的相关文章

python实现二分查找及bisect模块的简介

在查找方面,python中有list.index()的方法. <span style="font-size:14px;">>>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1</span> 这是python中基本的查找方法,虽然简单,但是,如果由于其时间复杂度为O(n),对于大规模的查询恐怕是不足以胜任的.二分查找就是一种替代方法. 二分查

二分查找与 bisect 模块

Python 的列表(list)内部实现是一个数组,也就是一个线性表.在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n).对于大数据量,则可以用二分查找进行优化.二分查找要求对象必须有序,其基本原理如下: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 二分查找也成为折半查找,

Python —— 二分查找

二分查找: l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] def func(l,aim,start= 0,end=None): if end == None:end = len(l) - 1 if start <= end: mid = (end + start) // 2 #12 18 if l[mid] < aim: return func(l,aim,start = mid +

bisect二分查找模块使用

import bisectL = [1, 3, 3, 6, 8, 12, 15]x = 5x_insert_point = bisect.bisect_left(L, x)# 在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1print(x_insert_point)x_insert_point = bisect.bisect_right(L, x) # 在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是3存在于列表中

两种方法实现Python二分查找算法

一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print("找到了"+str(mid)) elif arr[mid]<number: l = mid return findnumber(mid+1,h,number) elif arr[mid]>number: h = mid return findnumber(0,mid-1,number) e

Python 二分查找算法

一.解释 二分法:可以理解为折半查找法,每一次都是基于上一次的折半查找 二.实例 l = [1,2,5,7,10,31,44,47,56,99,102,130,240] #l为查找的列表 #num要查找的数 def binary_search(l,num): print(l) #[10, 31] if len(l) > 1: mid_index=len(l)//2 #1 if num > l[mid_index]: #in the right l=l[mid_index:] #l=[31] b

Python 二分查找

def search(data_set,find_num):    mid = len(data_set) /2    print mid    if len(data_set) == 1:       if data_set[mid] == find_num:        print ('End start: ',find_num)        return        else:        print ('NO NO NO:',find_num)        return   

python二分查找问题set

leetcode34 Search for a Range class Solution: def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ if not nums: return [-1, -1] def search(n): st = 0 ed = len(nums) - 1 while

二分查找&mdash;&mdash;Python实现

一.排序思想 二分(折半)查找思想请参见:https://www.cnblogs.com/luomeng/p/10585291.html 二.python实现 def binarySearchDemo(arr, key): """ python二分查找非递归方式 :param arr:待排序列,有序集合 :param key:带查找元素 """ low = 0 high = len(arr) - 1 while low <= high: m