Python 中的排序数据结构

python 中的排序数据结构

Python 提供多种工具和库来处理排序数据结构,这些结构在保持数据顺序的同时优化搜索、插入和删除操作。本文将介绍以下几种排序数据结构:

堆 (Heap)排序列表 (Sorted List)排序字典 (Sorted Dict)排序集合 (Sorted Set)

堆模块 (heapq)

Python 标准库heapq 模块提供了高效的堆实现,特别是最小堆。它基于二叉堆,适用于需要频繁访问最小(或最大)元素的场景。

示例:

import heapq堆 = [3, 1, 4]heapq.heapify(堆)  # 将列表转换为堆heapq.heappush(堆, 2)  # 添加元素print(堆)  # 输出: [1, 2, 4, 3]最小值 = heapq.heappop(堆)  # 弹出最小元素print(最小值)  # 输出: 1

更多 heapq 模块的功能和示例,请参考官方文档。

排序容器模块 (sortedcontainers)

sortedcontainers 模块提供动态排序数据结构,元素添加或删除时自动保持排序。该库高效易用。

立即学习“Python免费学习笔记(深入)”;

排序列表 (SortedList):

动态维护排序的列表。

from sortedcontainers import SortedListsl = SortedList([3, 1, 4])sl.add(2)print(sl)  # 输出: SortedList([1, 2, 3, 4])

SortedList 也支持 key 参数,类似于内置的 sorted() 函数。

from sortedcontainers import SortedListfrom operator import negsl = SortedList([3, 1, 4], key=neg)print(sl)  # 输出: SortedList([4, 3, 1])

注意: SortedList 支持大多数可变序列的方法,但部分方法不支持,会引发 NotImplementedError 异常。

排序字典 (SortedDict):

键按排序顺序维护的字典。SortedDict 继承自 dict,存储数据的同时维护一个排序的键列表。

排序字典的键必须可散列且可比较。键的哈希顺序和比较顺序在存储到字典后不能更改。

from sortedcontainers import SortedDictsd = SortedDict({"b": 2, "a": 1})sd["c"] = 3print(sd)  # 输出: SortedDict({'a': 1, 'b': 2, 'c': 3})

排序集合 (SortedSet):

元素保持排序的集合。

from sortedcontainers import SortedSetss = SortedSet([3, 1, 1, 4])ss.add(2)print(ss)  # 输出: SortedSet([1, 2, 3, 4])

SortedSet 同样支持 key 参数。

排序数据结构的权衡

排序数据结构虽然优势明显,但也存在一些权衡:

插入/删除开销: 与非排序结构相比,维护排序会增加插入和删除操作的计算成本。内存开销: 一些实现可能需要额外内存来维护排序。

结论

排序数据结构对于需要动态维护排序的应用至关重要。Python 的内置库和第三方库(如 sortedcontainers)提供了高效易用的实现。了解其优势和权衡,才能选择合适的工具构建高性能、可扩展的应用。

以上就是Python 中的排序数据结构的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1355218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 19:06:06
下一篇 2025年12月13日 19:06:13

相关推荐

  • 【Python】B站视频评论和弹幕处理分析脚本

    免责声明: 本脚本仅供个人学习和研究使用,禁止用于任何商业或非法用途。 概述 本Python脚本旨在辅助人文学科研究,特别是网络平台话语分析。它能够全面收集和分析B站视频的弹幕和评论数据,尤其适用于对亚文化和社会议题相关的海量内容进行深入研究、分析、补充和总结。 功能与原理 立即学习“Python免…

    好文分享 2025年12月13日
    000
  • 初学者 Python 项目:使用 OpenCV 和 Mediapipe 构建增强现实绘图应用程序

    本Python项目构建一个简单的增强现实(AR)绘图应用程序。利用摄像头和手势,您可以在屏幕上进行虚拟绘画,自定义画笔,甚至保存您的作品! 项目设置 首先,创建一个新文件夹,并使用以下命令初始化新的虚拟环境: python -m venv venv./venv/scripts/activate 然后…

    2025年12月13日
    000
  • 今年最佳编程语言

    本文盘点了2025年表现优异的编程语言,并对其特性及常用库进行了简要概述。 Python: 以其易用性和强大的库而著称,应用范围广泛。 数据科学: NumPy, Pandas, Scikit-learn, TensorFlow, PyTorchWeb开发: Django, Flask自动化: Sel…

    2025年12月13日
    000
  • Python 的神奇方法

    深入 Python 的 __new__ 方法 Python 中,创建新对象时会调用 __new__ 方法。该方法负责创建并返回一个新的类实例。当需要自定义对象创建过程时,例如实现单例模式、对象缓存或内存管理,就需要用到 __new__ 方法。 __new__ 方法的调用时机 __new__ 方法总是…

    2025年12月13日
    000
  • 用于股票情绪分析的 Python 脚本

    python在金融领域日益普及,其应用范围广泛,从基础计算到高级股票市场数据统计分析无所不包。本文将介绍一个python脚本,它展现了python在金融领域的强大功能,能够无缝整合数据、执行复杂计算并自动化任务,成为金融专业人士的得力助手。 该脚本演示如何利用Python分析新闻标题,从中提取市场情…

    2025年12月13日
    000
  • 使用 Django 和 HTMX 创建 To-Do 应用程序 – 使用 TDD 添加 Todo 模型部分

    this is part two of our series on building a todo application with htmx and django. click here to view part 1. In Part 2, we’ll create the todo …

    2025年12月13日
    000
  • 在 Python 中创建 Stripe 测试数据

    本教程演示如何通过一个简单的python脚本,快速在stripe沙盒环境中生成测试数据,用于构建基于supabase和openai的ai聊天机器人。此方法避免了复杂命令行工具的安装,降低了学习门槛。 许多AI数据课程需要预先加载的测试数据,但Stripe沙盒环境并未提供。虽然可以使用命令行工具加载示…

    2025年12月13日
    000
  • 最小最大和 – HackerRank 问题解决

    HackerRank 的最小最大和挑战 本文将指导您解决 HackerRank 的“最小最大和”算法挑战。此挑战需要您计算给定整数数组中任意四个元素的最小和与最大和。我们将探讨 Python 和 C 语言的解决方案。 问题描述 给定一个包含 n 个整数的数组,计算该数组中任意四个元素的最小和与最大和…

    2025年12月13日
    000
  • 使用 DevTools 和 HAR 文件抓取数据

    数据抓取:高效获取blinkit产品数据,助力应用开发 对于构建应用需要真实数据的开发者来说,数据抓取是高效获取信息的关键。本文将分享如何利用Chrome DevTools和HAR文件从Blinkit平台抓取产品数据,并阐述其优势。 为何选择数据抓取构建杂货应用? 在开发杂货配送应用时,获取真实数据…

    2025年12月13日 好文分享
    000
  • 在浏览器中轻松运行Python程序

    微软开源的markitdown项目,将office文件转换为markdown格式,迅速成为github热门项目。但其python程序特性限制了非技术用户的易用性。本文介绍如何利用webassembly技术,结合pyodide在浏览器中直接运行markitdown,解决这一问题。 Pyodide是一个…

    2025年12月13日
    000
  • 如何在地图中追踪步骤,代码降临 ay 6

    advent of code 2024: day 6 – guard patrol optimization I’m a bit behind on my Advent of Code challenges this year due to unforeseen circum…

    2025年12月13日
    000
  • 使用 Python 抓取 Google 搜索结果

    利用python高效抓取google搜索结果,洞悉数据趋势! Google每天处理超过85亿次搜索,占据全球搜索引擎市场91%的份额,蕴藏着巨大的数据价值,可用于SEO优化、竞争分析、潜在客户开发,以及高级LLM模型的训练和自然语言处理能力的提升。然而,直接抓取Google数据并非易事,需要专业的技…

    2025年12月13日
    000
  • 机器学习工程师路线图

    成为机器学习工程师的阶梯式学习路径 这份路线图清晰地规划了成为机器学习工程师所需的技能学习路径,循序渐进,由浅入深,并注重实践操作。 基础阶段:夯实根基 数学基础: 扎实的数学功底是机器学习的基石。你需要掌握概率论(理解事件发生的可能性)、统计学(分析和解释数据)、以及离散数学(处理离散值)等核心概…

    2025年12月13日
    000
  • Python 最佳实践:编写简洁且可维护的代码

    Python以其简洁性和可读性而闻名,深受初学者和资深开发者的喜爱。然而,编写干净、易于维护的代码需要超越基本语法。本文将探讨一些提升Python代码质量的关键最佳实践。 PEP 8规范的力量 PEP 8是Python的代码风格指南,遵循它能显著提升代码的可读性和可维护性。以下是一些核心原则: # …

    2025年12月13日
    000
  • 新手常见的 Python 面试问题

    本文将探讨10个常见的Python面试问题,帮助应届生顺利应对面试。 1. 解释型语言的概念 解释型语言由解释器逐行执行,其动态特性深受开发者青睐,便于调试和开发,并提供即时反馈。 2. Python的主要特性 立即学习“Python免费学习笔记(深入)”; Python是一款功能强大的跨平台编程语…

    2025年12月13日
    000
  • 使用 DQN 构建国际象棋代理

    我最近尝试用dqn构建一个国际象棋ai代理。 任何了解DQN和国际象棋的人都会告诉你这是个不太现实的想法。 确实如此,但作为一名初学者,我依然乐于尝试。本文将分享我的经验和心得。 环境理解 在实现代理之前,我需要熟悉环境并创建一个自定义包装器,以便在训练过程中与代理交互。 我使用了kaggle_en…

    2025年12月13日 好文分享
    000
  • Python While 循环教程 #Day3

    This Python code implements several functions using while loops to solve various number-related problems: 1. Armstrong Number: An Armstrong number is …

    2025年12月13日
    000
  • PyTorch 中的 fmod

    pytorch 的 fmod() 函数详解:模运算的利器 本文将详细介绍 PyTorch 中 fmod() 函数的功能、使用方法以及一些需要注意的细节。fmod() 函数用于执行模运算(取余),它可以处理不同形状的张量以及标量,并提供灵活的输出选项。 功能概述: fmod() 函数计算两个张量或一个…

    2025年12月13日
    000
  • 用 Python 解决每周挑战任务 1 和 0

    一、每周挑战赛简介 Mohammad S. Anwar 组织的每周挑战赛是一场友好的编程竞赛,参赛者需解决两个任务。它鼓励各水平的开发者参与学习、交流和娱乐。 本篇文章将重点介绍每周挑战赛第 302 周的任务 1:“一和零”的 Python 解法。 二、任务 1:一和零 立即学习“Python免费学…

    2025年12月13日
    000
  • 锤击清单

    每周挑战301:穆罕默德·安瓦尔 (Mohammad Anwar) 的算法挑战 穆罕默德·安瓦尔每周都会发布“每周挑战”,提供练习编程的绝佳机会。他先用 Python 编写解决方案,再转换成 Perl。让我们来看看本周的挑战及其解决方案。 挑战一:最大数字 任务: 给定一个正整数列表,将其中的元素重…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信