当前位置: 首页 > news >正文

python中SortedList类的用法详解

SortedList类是python第三方库sortedcontainers中的提供的一种高效的方式来存储有序的元素集合,同时支持快速的插入、删除和查找操作。

SortedList类的特点:
1.排序列表的值始终保持有序。
2.排序列表中的值必须可以比较。
3.值的总顺序在存储于排序列表期间不得改变。
4.插入、删除和查找操作的时间复杂度通常是对数级别的,这比标准列表的线性时间复杂度要好得多,特别是在处理大量数据时。
5.特别适用于需要频繁进行插入、删除和查找操作,同时需要保持元素排序的场景,如优先级队列、数据排序、范围查询等。

使用SortedList类,首先需要安装第三方库sortedcontainers:

pip install sortedcontainers

在使用的时候,从sortedcontainers导入SortedList类:

from sortedcontainers import SortedList

SortedList类提供的添加值的方法:add、update

  • add(value),添加单个元素到有序列表,value为要添加的值
s = SortedList()
s.add(1)
s.add(2)
print("add元素后:{}".format(s))

在这里插入图片描述

  • update(iterable),将可迭代对象,全部更新到有序列表,iterable为可迭代对象,如列表
s = SortedList()
s.update([1,2,3,4,5,6])
print("update元素后:{}".format(s))

在这里插入图片描述

SortedList类提供的移除值的方法:clear、discard、remove、pop

  • clear(),清空列表
s1 = [2,6,4,5,7,8,9,0]
s2 = SortedList(s1)
print(s2)
s2.clear()
print("clear元素后:{}".format(s2))

在这里插入图片描述

  • discard(value),从列表中删除指定元素,如果元素存在,删除列表中的元素,元素不存在,也不会报错
s1 = [2,6,4,5,7,8,9,0]
s2.update(s1)
print(s2)
s2.discard(2)
print("discard元素2后:{}".format(s2))
s2.discard(11)
print("discard元素11后:{}".format(s2))

在这里插入图片描述

  • remove(value),删除有序列表中的元素,元素必须存在,否则报ValueError的错!!
s1 = [2,6,4,5,7,8,9,0]
s2.update(s1)
print(s2)
s2.remove(4)
print("remove元素4后:{}".format(s2))
s2.remove(1)
print("remove元素1后:{}".format(s2))

在这里插入图片描述

  • pop(index),移除索引为index的值,index为索引,默认为-1,移除最后一个,注意index值不能超出边界,否则会报IndexError的错
s2.clear()
s1 = [2,6,4,5,7,8,9,0]
s2.update(s1)
print(s2)
res = s2.pop()
print(res)
print("pop索引为-1的元素后:{}".format(s2))
res1 = s2.pop(2)
print(res1)
print("pop索引为1的元素后:{}".format(s2))

在这里插入图片描述
在这里插入图片描述
SortedList类提供的查找值的方法:bisect_left、bisect_right、count、index

  • bisect_left(value),返回要插入value值在有序列表中的索引,value为要插入的值,如果列表中已有相同元素,则插入最左侧
s3 = SortedList([1,3,2,4,6])
print("s3为:{}".format(s3))
v = s3.bisect_left(7)
print("bisect_left插入值为7的元素后:{}".format(v))
v1 = s3.bisect_left(2)
print("bisect_left插入值为2的元素后:{}".format(v1))

在这里插入图片描述

  • bisect_right(value),与bisect_left一样,返回要插入value值在有序列表中的索引,value为要插入的值,如果列表中已有相同元素,则插入最右侧
s4 = SortedList([1,3,2,4,6])
print("s4为:{}".format(s4))
v3 = s4.bisect_right(3)
print("bisect_right插入值为3的元素后:{}".format(v3))
v4 = s4.bisect_right(8)
print("bisect_right插入值为8的元素后:{}".format(v4))

在这里插入图片描述

  • count(value),返回元素在列表中的数量,元素不存在时返回0
s5 = SortedList([1,1,2,3,4])
print("s5:{}".format(s5))
v5 = s5.count(1)
print("元素1的count次数为:{}".format(v5))
v6 = s5.count(7)
print("元素7的count次数为:{}".format(v6))

在这里插入图片描述

  • index(self, value, start=None, stop=None),返回元素的在列表中的第一个索引,如果有start、stop,则统计这个范围内对应值的索引,默认为None,为列表中所有元素,元素不存在时报错
s6 = SortedList([1,1,2,3,4])
v7 = s6.index(1)
print("元素1的index为:{}".format(v7))
v8 = s6.index(1,start=1, stop=2)
print("元素1的index为:{}".format(v8))

在这里插入图片描述
SortedList类提供了一些迭代值的方法:irange、islice

  • irange(minimum=None, maximum=None, inclusive=(True, True),reverse=False),创建一个从 minimummaximum 的值迭代器。默认情况下,minimummaximum 都设置为 None,这自动包括了排序列表的开始和结束。参数 inclusive 是一个布尔值对,表示是否应将最小值和最大值包含在范围内。默认值为(True,True),使得范围包括最小值和最大值。当 reverseTrue 时迭代器中的值将以相反顺序生成;reverse 默认为 False
s7 = SortedList([1,2,3,4,5])
print("s7:{}".format(s7))
l = s7.irange(2,4, (True, True), False)
for i in l:print("i的值:{}".format(i))l1 = s7.irange(1,3, (False, True), True)
for i1 in l1:print("i1的值:{}".format(i1))

在这里插入图片描述

  • islice(start=None, stop=None, reverse=False),返回一个迭代器,该迭代器从startstop对排序列表进行切片。startstop 索引分别被视为包含和排除。默认情况下 startstop 都为 None,这会自动包含排序列表的开始和结束。reverse 默认为 False,当 reverseTrue 时迭代器中的值将以反序生成。
s8 = SortedList([1,2,3,4,5,6])
it = s8.islice(1,3, True)
for i in it:print("i的值{}".format(i))it1 = s8.islice(1, 3, False)
for j in it1:print("j的值{}".format(j))

在这里插入图片描述

SortedList类提供的copy方法

  • copy(),返回排序后的列表的浅拷贝
s9 = SortedList([1,2,3,4,3,2])
print("s9:{}".format(s9))
s10 = s9.copy()
print("s10:{}".format(s10))

在这里插入图片描述


http://www.mrgr.cn/news/35975.html

相关文章:

  • VMware和CentOS 7.6 Linux操作系统的安装使用
  • Flink独立集群+Flink整合yarn
  • 数字化转型的路径、挑战和应用场景
  • Kafka参数了解
  • glide ModelLoader的Key错误使用 可能造成的内存泄漏
  • 排序算法 -插入排序
  • VMware提供虚拟硬盘并使得Oracle Linux集群共享块设备并绑定raw设备。
  • Word 制作会议名牌教程
  • JavaScript 算数运算符
  • C++之 string(中)
  • git@git安装包下载@git for windows加速下载@多种加速下载方案高成功率
  • 好看又有个性的动态屏保哪里有?好看的动态屏保推荐
  • W39-03-jstack 的命令使用线程查看
  • 从零到爆款:利用自养号测评打造Temu、亚马逊热销产品
  • 【AI大模型】股票价格预测精度增强,基于变分模态分解、PatchTST和自适应尺度加权层
  • ViT模型复现项目实战
  • 信息收集---CDN指纹识别
  • Cannon-es.js基础入门:3D 物理碰撞效果
  • (17)数据库neo4j数据备份
  • 基于 RealSense D435相机实现手部姿态检测
  • source 命令:加载环境变量
  • webservice xfire升级为cxf cxf常用注解 cxf技术点 qualified如何设置
  • 计算机视觉必备模型YOLO系列模型的知识点,提供YOLOv1-v8模型结构与代码实例
  • 快速排序 C语言实现
  • 在深度学习中,是否应该打破正负样本1:1的迷信思想?
  • 基于cesium风场的文件