SortedList

SortedList 是 sortedcontainers 库中的一个数据结构,它提供了一个有序列表,能够自动对存储的元素进行排序,并且支持高效的插入、删除和查找操作。下面从多个方面详细解释 SortedList:

安装

在使用 SortedList 之前,需要先安装 sortedcontainers 库,可以使用以下命令进行安装:

bash 复制代码
pip install sortedcontainers

基本使用示例

python 复制代码
from sortedcontainers import SortedList

# 创建一个空的 SortedList
sorted_list = SortedList()

# 向 SortedList 中添加元素
sorted_list.add(3)
sorted_list.add(1)
sorted_list.add(2)

print(sorted_list)  # 输出: SortedList([1, 2, 3])

从上述示例可以看出,即使元素是无序添加的,SortedList 会自动将它们排序。

主要特性

1. 自动排序

每次向 SortedList 中添加或删除元素时,它都会自动维护元素的有序性。无论何时访问列表中的元素,它们始终是按升序排列的。

python 复制代码
from sortedcontainers import SortedList

sl = SortedList([5, 2, 8])
print(sl)  # 输出: SortedList([2, 5, 8])

sl.add(3)
print(sl)  # 输出: SortedList([2, 3, 5, 8])
2. 高效的插入和删除操作

SortedList 内部使用了一种平衡树(通常是 B 树)来存储元素,这使得插入和删除操作的时间复杂度为 O(logn)O(log n)O(logn),其中 nnn 是列表中元素的数量。

python 复制代码
from sortedcontainers import SortedList

sl = SortedList([1, 2, 3, 4, 5])
sl.remove(3)
print(sl)  # 输出: SortedList([1, 2, 4, 5])
3. 支持索引访问

可以像普通列表一样通过索引来访问 SortedList 中的元素,索引从 0 开始。

python 复制代码
from sortedcontainers import SortedList

sl = SortedList([10, 20, 30, 40, 50])
print(sl[2])  # 输出: 30
4. 支持切片操作

SortedList 也支持切片操作,返回一个新的 SortedList 对象。

python 复制代码
from sortedcontainers import SortedList

sl = SortedList([1, 2, 3, 4, 5])
sliced = sl[1:3]
print(sliced)  # 输出: SortedList([2, 3])
5. 支持查找操作

可以使用 bisect_left 和 bisect_right 方法来查找元素的插入位置,时间复杂度为 O(logn)O(log n)O(logn)。

python 复制代码
from sortedcontainers import SortedList

sl = SortedList([1, 3, 5, 7, 9])
index = sl.bisect_left(4)
print(index)  # 输出: 2

常用方法

1. add(value)

向 SortedList 中添加一个元素,并自动对列表进行排序。

2. remove(value)

从 SortedList 中移除指定的元素,如果元素不存在会抛出 ValueError 异常。

3. pop(index=-1)

移除并返回指定索引位置的元素,默认移除最后一个元素。

4. clear()

清空 SortedList 中的所有元素。

5. bisect_left(value) 和 bisect_right(value)

分别返回元素 value 在 SortedList 中应该插入的最左和最右位置。

应用场景

  • 需要频繁插入、删除元素并保持有序性的场景 :例如,在实现优先队列、事件调度器等场景中,SortedList 可以高效地维护元素的顺序。
  • 查找元素的插入位置 :可以利用 bisect_left 和 bisect_right 方法快速找到元素应该插入的位置,而无需手动遍历列表。

总之,SortedList 是一个功能强大且高效的数据结构,适用于需要自动排序和高效操作的场景。

相关推荐
蜗牛互联网1 分钟前
Python Responses API视觉输入与本地金额校验最小实现
java·开发语言·人工智能·后端·python
Python图像识别4 分钟前
35-【2027毕设】YOLO11中草药检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
马六六i6 分钟前
市面上专业的IP驱动产业新场景新工具哪家好
网络·人工智能·python·tcp/ip
Omics Pro20 分钟前
强生:以机理为中心!虚拟细胞世界模型
数据库·人工智能·python·深度学习·算法·机器学习·自然语言处理
VidDown21 分钟前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
czq_268671948729 分钟前
Python打卡第34天
开发语言·python·机器学习
计算机毕业编程指导师32 分钟前
大数据毕设选题推荐:基于Hadoop+Spark全球碳排放减排策略分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·碳排放减排
专业程序开发源34 分钟前
django便利店外卖后台管理系统19650-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
toooooop840 分钟前
宝塔Python项目管理器:环境变量踩坑记录
java·jvm·python
大文说跨境41 分钟前
用 Python 自动化检测浏览器环境指纹:WebRTC 泄露、Canvas 哈希与时区一致性校验
python·自动化·webrtc