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

从混沌到有序:sortedcontainers库的数据魔法改变你的编程体验

前言

在当今数据爆炸的时代,高效地处理和操作数据成为每位Python开发者的核心任务。在这个背景下,sortedcontainers库以其强大的有序数据结构为程序员提供了处理大规模数据的优越选择。本文将深入研究sortedcontainers库中的主要有序数据结构,以便读者能够更全面地了解这些工具如何优化数据处理流程。

创新数据处理:探索sortedcontainers库的奥秘

在这个数字时代,数据的快速处理是保持竞争力的关键。本文深入研究了sortedcontainers库中的有序数据结构,包括SortedListSortedDictSortedSetSortedListWithKey。通过学习这些工具的使用和实际场景的应用,你将能够以更高效的方式处理和操作数据,为你的Python项目带来更大的优势。

文章目录

  • 前言
    • 创新数据处理:探索`sortedcontainers`库的奥秘
      • 1. 有序列表:`SortedList`
        • 1.1 核心方法解析
        • 1.2 实际场景应用
      • 2. 有序字典:`SortedDict`
        • 2.1 操作方法解析
        • 2.2 实际用例剖析
      • 3. 有序集合:`SortedSet`
        • 3.1 高级操作方法
        • 3.2 实际应用场景
      • 4. 关键字排序列表:`SortedListWithKey`
        • 4.1 自定义排序的威力
        • 4.2 实际案例探讨
      • 5. `SortedKeysView` 和 `SortedValuesView` 的核心方法:
        • 5.1 初始化方法:
        • 5.2 视图操作:
          • 5.2.1. `SortedKeysView` 示例:
          • 5.2.2. `SortedValuesView` 示例:
      • 总结


1. 有序列表:SortedList

1.1 核心方法解析

首先,让我们深入了解SortedList的核心方法。在以下示例中,我们将演示如何使用SortedList的添加、删除和查找方法。

from sortedcontainers import SortedList# 创建一个有序列表
sorted_list = SortedList([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])# 添加元素
sorted_list.add(8)
print(sorted_list)  # 输出: SortedList([1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 8, 9])# 删除元素
sorted_list.remove(3)
print(sorted_list)  # 输出: SortedList([1, 1, 2, 4, 5, 5, 5, 6, 8, 9])# 查找元素
index = sorted_list.index(5)
print(index)  # 输出: 4
1.2 实际场景应用

在实际场景中,SortedList可以用于对一系列数据进行排序和快速查找。例如,我们可以使用它来维护一个有序的任务列表,以确保按优先级处理任务。

from sortedcontainers import SortedList# 创建一个有序任务列表
task_list = SortedList(key=lambda task: task['priority'])# 添加任务
task_list.add({'name': 'Task 1', 'priority': 3})
task_list.add({'name': 'Task 2', 'priority': 1})
task_list.add({'name': 'Task 3', 'priority': 2})# 打印有序任务列表
print(task_list)
# 输出: SortedList([{'name': 'Task 2', 'priority': 1}, {'name': 'Task 3', 'priority': 2}, {'name': 'Task 1', 'priority': 3}], key=<function <lambda> at 0x...>)

2. 有序字典:SortedDict

2.1 操作方法解析

接下来,我们深入探讨SortedDict的操作方法。我们将演示如何使用SortedDict的添加、删除和遍历键值对的方法。

from sortedcontainers import SortedDict# 创建一个有序字典
sorted_dict = SortedDict({'b': 2, 'a': 1, 'c': 3})# 添加键值对
sorted_dict['d'] = 4
print(sorted_dict)  # 输出: SortedDict({'a': 1, 'b': 2, 'c': 3, 'd': 4})# 删除键值对
del sorted_dict['b']
print(sorted_dict)  # 输出: SortedDict({'a': 1, 'c': 3, 'd': 4})# 遍历键值对
for key, value in sorted_dict.items():print(key, value)
# 输出:
# a 1
# c 3
# d 4
2.2 实际用例剖析

在实际应用中,SortedDict可以用于对字典进行按键排序的场景。例如,我们可以使用它来记录并按时间顺序查看用户的操作历史。

from sortedcontainers import SortedDict
from datetime import datetime# 创建一个按时间排序的操作历史字典
history_dict = SortedDict()# 添加操作记录
history_dict[datetime(2023, 1, 1, 12, 0)] = 'User logged in'
history_dict[datetime(2023, 1, 1, 14, 30)] = 'Data updated'
history_dict[datetime(2023, 1, 2, 9, 15)] = 'Task completed'# 打印按时间排序的操作历史
for timestamp, action in history_dict.items():print(f'{timestamp}: {action}')
# 输出:
# 2023-01-01 12:00:00: User logged in
# 2023-01-01 14:30:00: Data updated
# 2023-01-02 09:15:00: Task completed

3. 有序集合:SortedSet

3.1 高级操作方法

现在,让我们深入了解SortedSet的高级操作方法,包括切片、交集、并集等。

from sortedcontainers import SortedSet# 创建一个有序集合
sorted_set1 = SortedSet([1, 2, 3, 4, 5])
sorted_set2 = SortedSet([3, 4, 5, 6, 7])# 切片操作
subset = sorted_set1.islice(start=1, stop=4)
print(list(subset))  # 输出: [2, 3, 4]# 交集操作
intersection = sorted_set1 & sorted_set2
print(intersection)  # 输出: SortedSet([3, 4, 5])# 并集操作
union = sorted_set1 | sorted_set2
print(union)  # 输出: SortedSet([1, 2, 3, 4, 5, 6,7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
3.2 实际应用场景

在实际应用中,SortedSet可以用于对集合进行高效排序和操作。例如,我们可以使用它来管理用户的兴趣爱好,确保它们按字母顺序排列。

from sortedcontainers import SortedSet# 创建一个按字母顺序排序的兴趣爱好集合
interests = SortedSet(['Reading', 'Traveling', 'Coding', 'Music'])# 添加新的兴趣爱好
interests.add('Painting')# 打印按字母顺序排序的兴趣爱好
print(interests)
# 输出: SortedSet(['Coding', 'Music', 'Painting', 'Reading', 'Traveling'])

4. 关键字排序列表:SortedListWithKey

4.1 自定义排序的威力

接下来,让我们深入了解SortedListWithKey,特别是关键字排序的方式。我们将演示如何使用自定义排序函数进行排序。

from sortedcontainers import SortedListWithKey# 创建一个基于关键字排序的有序列表
sorted_list_with_key = SortedListWithKey(key=lambda x: x.lower())# 添加元素
sorted_list_with_key.add("banana")
sorted_list_with_key.add("apple")
sorted_list_with_key.add("cherry")# 打印有序列表
print(sorted_list_with_key)  # 输出: SortedListWithKey(['apple', 'banana', 'cherry'])
4.2 实际案例探讨

在实际应用中,SortedListWithKey可以用于需要根据某种规则对元素进行排序的场景。例如,我们可以使用它来排序包含不同字母大小写的单词。

from sortedcontainers import SortedListWithKey# 创建一个基于关键字排序的有序列表,忽略大小写
sorted_list_with_key = SortedListWithKey(key=lambda x: x.lower())# 添加元素
sorted_list_with_key.add("Apple")
sorted_list_with_key.add("banana")
sorted_list_with_key.add("cherry")# 打印有序列表
print(sorted_list_with_key)  # 输出: SortedListWithKey(['Apple', 'banana', 'cherry'], key=<function <lambda> at 0x...>)

SortedKeysViewSortedValuesViewsortedcontainers 中的有序视图类,它们分别提供了按键和按值排序的视图。以下是一些示例,演示了这两个类的核心方法:
以下是 sortedcontainers 中主要的一些函数和方法的概述。请注意,这里列出的信息可能不是最新的,建议查阅最新的文档以获取详细信息。

5. SortedKeysViewSortedValuesView 的核心方法:

5.1 初始化方法:
  • __init__(self, *args, **kwargs): 初始化 SortedKeysView 或 SortedValuesView 对象。
5.2 视图操作:
  • __iter__(self): 返回一个迭代器,允许对 SortedKeysView 或 SortedValuesView 进行迭代。
  • __reversed__(self): 返回一个反向迭代器。

这是一个简要的概述,具体的使用和参数细节建议查阅 sortedcontainers 的官方文档,以确保获取最准确和最新的信息。

5.2.1. SortedKeysView 示例:
from sortedcontainers import SortedDict# 创建一个有序字典
sorted_dict = SortedDict({'b': 2, 'a': 1, 'c': 3})# 获取有序键视图
sorted_keys_view = sorted_dict.keys()# 打印有序键列表
print(sorted_keys_view)  # 输出: SortedKeysView(SortedDict({'a': 1, 'b': 2, 'c': 3}))# 使用迭代器遍历有序键
for key in sorted_keys_view:print(key)
# 输出:
# a
# b
# c
5.2.2. SortedValuesView 示例:
from sortedcontainers import SortedDict# 创建一个有序字典
sorted_dict = SortedDict({'b': 2, 'a': 1, 'c': 3})# 获取有序值视图
sorted_values_view = sorted_dict.values()# 打印有序值列表
print(sorted_values_view)  # 输出: SortedValuesView(SortedDict({'a': 1, 'b': 2, 'c': 3}))# 使用迭代器遍历有序值
for value in sorted_values_view:print(value)
# 输出:
# 1
# 2
# 3

在这两个示例中,SortedKeysViewSortedValuesView 对象分别被创建,并使用迭代器进行遍历。这些视图类提供了对原始字典有序键或有序值的引用,而无需显式排序。

请注意,这些视图类的行为类似于普通的 setlist 视图,但在字典中提供了按键或按值排序的功能。

总结

通过深入了解sortedcontainers库中的有序数据结构,我们不仅学习了这些数据结构的核心操作方法,还探讨了它们在实际应用中的灵活性和高效性。这个库为处理和操作数据提供了强大的工具,尤其在需要排序、插入和删除操作频繁的场景中表现突出。掌握这些有序数据结构,将使你在处理大规模数据时更加得心应手。

相关文章:

从混沌到有序:sortedcontainers库的数据魔法改变你的编程体验

前言 在当今数据爆炸的时代&#xff0c;高效地处理和操作数据成为每位Python开发者的核心任务。在这个背景下&#xff0c;sortedcontainers库以其强大的有序数据结构为程序员提供了处理大规模数据的优越选择。本文将深入研究sortedcontainers库中的主要有序数据结构&#xff0…...

读取pdf、docx、doc、ppt、pptx并转为txt

文章目录 一、思路构建二、开始实现三、存在的问题3.1 解析doc文档遇到问题及解决方法&#xff1a;3.2 解析ppt文档遇到问题及解决方法&#xff1a; 四、读取pdf中的图片 一、思路构建 Zip文件和初始化文件放在同一个文件夹下&#xff1b;然后解析zip文件读取到一个新的文件夹…...

11.13/14 理解SDK框架遇到的问题

1.1.浮点数打印问题 float red_increment (target_red_value - initial_red_value) / STEPS; u8 STEPS 100; printf("绿色值每一次增量------%f\n", red_increment); 后面三个参数均为u8类型 希望采用 %f打印出每次的步进值。但是结果为空白 希望采用 %.2f打印…...

计算机网络——b站王道考研笔记

第一章 计算机网络体系结构 1.计算机网络概述 &#xff08;1&#xff09;概念 计算机网络是一个将分散的&#xff0c;具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统&#xff1b; 是互连的&#…...

Stm32_标准库_18_串口蓝牙模块_手机与蓝牙模块通信_控制LED灯亮灭

通过输入LED_ON和LED_OFF分别控制LED灯的亮与灭 接线&#xff1a; LED的正极接正电&#xff0c;负极接GPIOA_Pin1 蓝牙模块TXD接GPIOA_Pin3,VCC接正电&#xff0c;GND接负电 注意&#xff1a;USART2是APB1外设&#xff0c;汉字占用字节数是字符的两倍 使用&#xff1a; 手…...

低代码与传统开发:综合比较

近年来&#xff0c;低代码开发作为软件开发的趋势获得了显着的发展势头。根据 MarketsandMarkets 的数据&#xff0c;低代码开发市场预计将实现 28.1% 的大幅增长率&#xff0c;到 2025 年价值将达到 455 亿美元。这一显着增长表明了各行业和企业对低代码平台的需求和采用不断增…...

pyqt环境搭建

创建虚拟环境 # 用管理员身份运行 conda create --prefixE:\Python\envs\pyqt5stu python3.6 # 激活虚拟环境 conda activate E:\Python\envs\pyqt5stu # 退出虚拟环境 conda deactivate安装包 pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools…...

JavaScript数据类型和存储区别

目录 一、原始数据类型 二、引用数据类型 三、存储区别 四、常见错误 JavaScript是一种动态类型语言&#xff0c;这意味着变量可以在程序执行过程中改变其数据类型。了解JavaScript中的数据类型和它们的存储方式对于编写高效和可维护的代码至关重要。 在JavaScript中&…...

Java学习笔记(七)——面向对象编程(中级)

一、IDEA &#xff08;一&#xff09;常用的快捷键 &#xff08;二&#xff09;模版/自定义模版 二、包 &#xff08;一&#xff09;包的命名 &#xff08;二&#xff09;常用的包 &#xff08;三&#xff09;如何引入&#xff08;导入&#xff09;包 &#xff08;四&am…...

详细推导MOSFET的跨导、小信号模型、输出阻抗、本征增益

目录 前言 什么是跨导 什么是小信号模型 什么是输入阻抗和输出阻抗 什么是MOS管的输出阻抗 什么是MOS管的本征增益 共源极放大电路的输入和输出阻抗 一些其它MOS拓扑电路的增益 负载为恒流源 负载为二极管 前言 相信很多人在学习集成电路领域的时候 都对MOS管的…...

循环2作业

第一题 #include <stdio.h>int main() {int n,f,y,i,j;scanf("%d",&n);for(y0;y<100;y)for(f0;f<100;f)if(200*y2*ff*100y-n){printf("%d.%d",y,f);return 0;}printf("%d No Solution",n);return 0; }第二题 #include<stdi…...

一个车厢号码识别算法(2005年的老程序----ccc)

一个车厢号码识别算法&#xff08;2005年的老程序----ccc&#xff09; 2023-09-18 ccc 程序的识别效果 对图中的车厢号码部分用上下两条线限定分为&#xff0c;然后进行识别。 从上面的识别效果可以看出&#xff0c;识别算法具有一定的鲁棒性&#xff0c;能够适应车厢号码的各…...

「Verilog学习笔记」优先编码器电路①

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns//优先编码器电路1 //电路的优先顺序是&#xff0c;从9到1&#xff0c;高级到低级 //9个输入端&#xff1a;I端&#xff0c;4个输出端&#xff1a;Y端&am…...

解决企业项目管理难题:痛点分析与实用解决方案探索

在当前竞争激烈的商业环境中&#xff0c;产品力已然成为市场竞争的核心&#xff0c;这背后的驱动力是技术、人才和管理能力的综合体现——研发创新能力。其中&#xff0c;项目管理能力扮演着至关重要的角色&#xff0c;它能最大化地发挥和释放以上三者的优势。因此&#xff0c;…...

Nginx 简介和安装

文章目录 介绍Nginx的优点(1)速度更快、并发更高(2)配置简单&#xff0c;扩展性强(3)高可靠性(4)热部署(5)成本低、BSD许可证 Nginx的功能特性及常用功能基本HTTP服务高级HTTP服务邮件服务Nginx常用的功能模块 Nginx环境准备docker安装乌班图安装Nginx目录结构分析方式一:Nginx…...

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】

idea生成代码&#xff08;一&#xff09;&#xff1a;实现java语言的增删改查功能&#xff08;基于EasyCode插件&#xff09;支持自定义模板【非常简单】 idea生成代码&#xff08;二&#xff09;&#xff1a;实现java语言的增删改查功能&#xff08;基于mybatis-plus代码生成器…...

vue预览各种格式图片png jpg tif tiff dcm

// 没有图片展示暂无 有图片&#xff0c;判断格式 png jpg 直接展示 tif tiff需要转化成png展示 dcm需要用到插件 <el-col :span"16"><div style"width:100%;text-align: center;margin-bottom: 10px;">图件预览</div><div style&quo…...

出入库管理系统vue2前端开发服务器地址配置

【精选】vue.config.js 的完整配置&#xff08;超详细&#xff09;_vue.config.js配置_web学生网页设计的博客-CSDN博客 本项目需要修改两处&#xff1a; 1、vue开发服务器地址&#xff1a;config\index.js use strict // Template version: 1.3.1 // see http://vuejs-templa…...

民安智库(第三方满意度调研公司):助力奢侈品品牌提升客户满意度

在奢侈品行业中&#xff0c;客户满意度是衡量品牌价值和市场竞争力的关键因素。为了准确了解客户的需求和反馈&#xff0c;民安智库&#xff08;北京第三方社会调查评估&#xff09;以其专业的满意度调查方法&#xff0c;受委托对某奢侈品品牌进行全面的客户满意度调查。 此次…...

蓝牙特征值示例1-迈金L308自行车尾灯夜骑智能表情尾灯的

了解商品级蓝牙特征值 1 服务器&#xff08;设备&#xff09;描述 0x02-01-06 05-03-0F180A18 09-FF-FFFF166B001C0101 0A-09-4C3330385F37393937 01设备标识 03服务UUID FF厂商自定义数据(厂家编号&#xff1a;FFFF-166B001C0101) 完整设备名称&#xff1a; L308-7997 2 服…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...