博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python bisect序列二分法详解
阅读量:3924 次
发布时间:2019-05-23

本文共 1233 字,大约阅读时间需要 4 分钟。

此模块支持按顺序维护列表,而不必在每次插入之后对列表进行排序。对于具有昂贵比较操作的长列表项,这可能是对更常见方法的改进。这个模块被称为平分,因为它使用一个基本的平分算法来完成它的工作。

首先一部分
bisect.bisect_left(a, x, lo=0, hi=len(a)):
找到a中x的插入点以保持排序顺序。参数lo和hi可以用来指定应该考虑的列表子集;默认情况下使用整个列表。如果x已经存在于a中,则插入点将位于任何现有项的前面(在其左侧)。如果已经对a进行了排序,则返回值适合用作list.insert()的第一个参数。
返回的插入点i将数组a分成两半,以i为分界分为左右
bisect.bisect(a, x, lo=0, hi=len(a)):
类似于bisect_left(),但返回一个插入点,该插入点位于a中x的任何现有项之后(在其右侧)。
bisect.insort_left(a, x, lo=0, hi=len(a)):
以a的顺序插入x。这等价于a.insert(bisect.bisect_left(a, x, lo, hi), x)
假设a已经排好序了,
其次还可以:

def index(a, x):    'Locate the leftmost value exactly equal to x'    i = bisect_left(a, x)    if i != len(a) and a[i] == x:        return i    raise ValueErrordef find_lt(a, x):    'Find rightmost value less than x'    i = bisect_left(a, x)    if i:        return a[i-1]    raise ValueErrordef find_le(a, x):    'Find rightmost value less than or equal to x'    i = bisect_right(a, x)    if i:        return a[i-1]    raise ValueErrordef find_gt(a, x):    'Find leftmost value greater than x'    i = bisect_right(a, x)    if i != len(a):        return a[i]    raise ValueErrordef find_ge(a, x):    'Find leftmost item greater than or equal to x'    i = bisect_left(a, x)    if i != len(a):        return a[i]    raise ValueError

转载地址:http://qlhrn.baihongyu.com/

你可能感兴趣的文章
Chrome正在启用HTTP/3,支持IETF QUIC
查看>>
Net5 已经来临,让我来送你一个成功
查看>>
System.Text.Json中时间格式化
查看>>
怎么将SVG转成PNG(.NET工具包编写)
查看>>
为什么曾经优秀的人突然变得平庸?
查看>>
.NET 5 中的隐藏特性
查看>>
.NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
查看>>
我画着图,FluentAPI 她自己就生成了
查看>>
BenchmarkDotNet v0.12x新增功能
查看>>
使用 .NET 5 体验大数据和机器学习
查看>>
C# 中的数字分隔符 _
查看>>
使用 docker 构建分布式调用链跟踪框架skywalking
查看>>
Github Actions 中 Service Container 的使用
查看>>
别在.NET死忠粉面前黑.NET5,它未来可期!
查看>>
Winform 进度条弹窗和任务控制
查看>>
部署Dotnet Core应用到Kubernetes(二)
查看>>
持续交付二:为什么需要多个环境
查看>>
FreeSql接入CAP的实践
查看>>
浅析 EF Core 5 中的 DbContextFactory
查看>>
听说容器正在吃掉整个软件世界?
查看>>