Python开发之Python数据结构与算法—维护有序列表bisect
小职 2021-06-04 来源 :一天一篇Python库 阅读 481 评论 0

摘要:本文主要介绍了Python开发之Python数据结构与算法—维护有序列表bisect,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

本文主要介绍了Python开发之Python数据结构与算法—维护有序列表bisect,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

Python开发之Python数据结构与算法—维护有序列表bisect



前言

bisect实现了一个算法来向列表中插入元素,同时仍保持列表有序。

 

本篇,将详细介绍bisect库高效率的玩转列表。

 

有序插入

首先,我们来看看bisect库是如何实现列表的插入的。具体代码如下所示:

 

import bisect

 

a = [7, 5, 4, 1, 9, 8, 2, 3, 6, 0, 5]

print(a)

new_a = []

for i in a:

    position = bisect.bisect(new_a, i)

    bisect.insort(new_a, i)

    print(position, new_a)

运行之后,效果如下:

 Python开发之Python数据结构与算法—维护有序列表bisect

 

 

可以看到,bisect会自动排序进行插入,position为插入的索引位置。当然,对于此类插入如果直接构建列表,然后排序,可能速度更快。不过这只仅仅对于短列表而言非常的快,对于非常长的列表而言,使用上面这种插入排序方式可以大大节省时间和内存,尤其是比较两个列表成员的操作需要开销很大的计算量时。

 

重复值处理

在实际的列表处理中,我们可能处理重复的值。如前文所示,多余的5是默认插入到重复值右边的,也就是说相当于使用insort_right()函数。同理,那么左边我们就可以用insort_left()函数。

 

import bisect

 

a = [7, 5, 4, 1, 9, 8, 2, 3, 6, 0, 5]

print(a)

new_a = []

for i in a:

    position = bisect.bisect_left(new_a, i)

    bisect.insort_left(new_a, i)

    print(position, new_a)

运行之后,效果如下:

 Python开发之Python数据结构与算法—维护有序列表bisect

 

 

读者可以对比一下上面两个图片,最后一行的索引变化。可以看到,一个是6,一个是5,因为我们主动变更,把重复值默认插入到左边了。


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python开发之Python数据结构与算法—维护有序列表bisect

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程