- Python数据整理
- (美)提尔塔吉奥蒂·萨卡 (印)舒布哈迪普·罗伊乔杜里
- 635字
- 2025-02-14 17:47:29
练习21:在Python中实现队列
1.使用简单的列表方法创建Python队列:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-i.jpg?sign=1739677702-DFsfXSTbfv9nYsLeBONq8dedo4iZJtOj-0-2e97c6b531f380605b00d86888cd6026)
输出如下:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-2-i.jpg?sign=1739677702-9V5bNL8ksffu0BXwvi5te8xMvq5yFrS9-0-263242a55f10c511a32097a198265e04)
2.使用pop函数清空队列并检查其中的元素:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-3-i.jpg?sign=1739677702-rXgAgNTgEog0VF3w5QOiFBBihAlA8GT2-0-ef2505b0ce86db4e135d2242b071fa1f)
输出如下:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-4-i.jpg?sign=1739677702-m4iXBKkdLUBDi79dD73Lelw6ZPmGXra3-0-deac4d282a136b974d3689c8cb45b24c)
如果在执行上述代码时使用魔术命令%%time,我们将看到代码执行需要一段时间。一个拥有四核处理器和8GB内存的苹果笔记本MacBook,执行上述代码大约需要1.20秒。花费这些时间是因为pop(0)操作,即我们每次从列表左侧弹出一个值(当前的0索引),Python都必须通过向左移动一个空格来重新排列列表中的所有其他元素。事实上,它不是一个最优实现。
3.使用Python中collection包的deque数据结构实现相同的队列操作:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-5-i.jpg?sign=1739677702-wf7ClQLu1x1LKxOHth5wHKFk5z0yWLyj-0-f899a9e7a5b1fc8dcf2335a58afdedc3)
输出如下:
![](https://epubservercos.yuewen.com/63BD11/17517093106688706/epubprivate/OEBPS/Images/031-6-i.jpg?sign=1739677702-3t201SrN1kGLEFQh3z80jkctqfXg7HL8-0-b4baa57b302bb8619df50231f4b7263e)
4.通过使用Python标准库实现队列的专业优化,用时在28毫秒内!这是对上一种方法的巨大改进。
队列是一种非常重要的数据结构。为了给出一个现实生活中的例子,我们想到了生产者-消费者系统设计。在进行数据整理时经常会遇到一个问题,即必须处理非常大的文件。此问题的处理方法之一是将文件的内容分成较小的部分,然后将它们推入队列,同时创建小的专用工作进程,该进程读取队列并一次处理一个较小的部分。这是一个非常强大的设计,你甚至可以有效地用它来设计大型多节点数据整理。
我们对数据结构的讨论即将结束,这里讨论的只是冰山一角。数据结构是一个引人入胜的主题,但还有许多我们没有接触到的其他数据结构,如果能够有效使用,将提供巨大的附加价值。我们强烈建议你进一步探索数据结构,尽可能多地学习链表、树、图、前缀树以及它们的所有变种。它们不仅提供了学习的乐趣,而且也是数据从业人员武器库中的秘密巨型武器,用于挑战每次遇到的复杂数据整理工作。