该bisect模块实现了一种算法。用于将元素插入列表。同时按排序顺序维护列表。
以排序顺序插入
这就是一个简单的示例。insort()用于按排序顺序将项目插入列表。
bisect_example.py
import bisect# A series of random numbersvalues = [14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 77, 1]print('New Pos Contents')print('— — ——–')l = []for i in values: position = bisect.bisect(l, i) bisect.insort(l, i) print('{:3} {:3}'.format(i, position), l)输出的第一列显示新的随机数。第二列显示数字将插入列表的位置。每行的其余部分是目前排序列表。
$ python3 bisect_example.pyNew Pos Contents— — ——– 14 0 [14] 85 1 [14, 85] 77 1 [14, 77, 85] 26 1 [14, 26, 77, 85] 50 2 [14, 26, 50, 77, 85] 45 2 [14, 26, 45, 50, 77, 85] 66 4 [14, 26, 45, 50, 66, 77, 85] 79 6 [14, 26, 45, 50, 66, 77, 79, 85] 10 0 [10, 14, 26, 45, 50, 66, 77, 79, 85] 3 0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85] 84 9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85] 77 8 [3, 10, 14, 26, 45, 50, 66, 77, 77, 79, 84, 85] 1 0 [1, 3, 10, 14, 26, 45, 50, 66, 77, 77, 79, 84, 85]这就是一个简单的例子。事实上。考虑到被操纵的数据量。简单地构建列表然后对其进行一次排序可能会更快。相比之下。对于长列表。使用诸如此类的插入排序算法可以实现显着的期间和存放器节省。尤其是当比较列表的两个成员的操作需要昂贵的计算时。
处理重复
先前显示的结果集包括重复值。77。该 bisect模块提供了两种处理重复的方法:可以将新值插入现有值的左侧。也完全可以插入右侧。该insort()函数说实话是一个别名 insort_right()。它在现有值之后插入一个项目。相应的函数insort_left()在现有值之前插入一个项。
bisect_example2.py
import bisect# A series of random numbersvalues = [14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 77, 1]print('New Pos Contents')print('— — ——–')# Use bisect_left and insort_left.l = []for i in values: position = bisect.bisect_left(l, i) bisect.insort_left(l, i) print('{:3} {:3}'.format(i, position), l)当使用bisect_left()和 操作相同的数据时insort_left()。结果是相同的排序列表。但插入位置对于重复值是不同的。
$ python3 bisect_example2.pyNew Pos Contents— — ——– 14 0 [14] 85 1 [14, 85] 77 1 [14, 77, 85] 26 1 [14, 26, 77, 85] 50 2 [14, 26, 50, 77, 85] 45 2 [14, 26, 45, 50, 77, 85] 66 4 [14, 26, 45, 50, 66, 77, 85] 79 6 [14, 26, 45, 50, 66, 77, 79, 85] 10 0 [10, 14, 26, 45, 50, 66, 77, 79, 85] 3 0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85] 84 9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85] 77 7 [3, 10, 14, 26, 45, 50, 66, 77, 77, 79, 84, 85] 1 0 [1, 3, 10, 14, 26, 45, 50, 66, 77, 77, 79, 84, 85]
以上就是由优质生活领域创作者 生活常识网 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:http://www.shenzhoubaby.com/7001.html,转载请说明来源于:生活常识网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系@qq.com进行处理。分享目的仅供大家学习与参考,不代表本站立场。