提升Python程序运行效率的技巧:deque add方法

Python是一种简单易学、功能强大的编程语言。但与此同时,Python程序也因其解释执行的特性而臭名昭著的慢。但是,Python也提供了许多有效地优化程序性能的技巧和方法,本文将着重介绍其中一种——deque的add方法。

一、什么是deque?

import collectionsdeque = collections.deque(maxlen=3)deque.append(1)deque.append(2)deque.append(3)print(deque)

deque是一个双端队列,支持从两端高效地添加和删除元素。在上述代码中,我们用collections模块创建了一个长度为3的deque并向其中添加了数值为1、2、3的元素。运行上述代码可以得到以下输出:

deque([1, 2, 3], maxlen=3)

从输出结果可以看出,当向deque中添加元素时,如果超过了指定的长度,队列的左端就会自动删除一个元素,保证队列的大小不超过指定的长度。

二、deque的add方法

deque提供了add方法,该方法可以同时向队列的左端和右端添加元素。下面是一个示例代码:

import collectionsdeque = collections.deque(maxlen=3)deque.append(1)deque.append(2)deque.append(3)deque.appendleft(4)print(deque)

在上述代码中,我们使用append和appendleft分别向deque的右端和左端添加了元素,运行代码后得到以下输出:

deque([4, 1, 2], maxlen=3)

从输出结果可以看出,add方法的调用顺序与传入元素的位置有关。在上面的示例中,我们先向右端添加了数值为1、2、3的元素,然后又向左端添加了数值为4的元素,最终得到的结果是4、1、2三个元素。

三、deque add方法的使用场景

当我们需要高效地维护一个固定大小的元素集合时,deque的add方法就可以派上用场了。例如:

1. 实时数据处理场景

在实时数据处理场景下,我们需要不断地从输入流中读取数据,并将这些数据添加到缓存中,以便下一步对这些数据进行处理。我们可以使用deque来维护一个固定大小的缓存,当读取到新数据时,直接调用add方法,将数据添加到缓存的右端。

下面是一个示例代码:

import collectionsimport randomdeque = collections.deque(maxlen=5)for i in range(20):    data = random.randint(1, 100)    deque.append(data)    print(f"add data {data}: {deque}")

在上面的代码中,我们模拟了一个实时数据处理场景,随机生成20个数值并将其添加到长度为5的deque对象中。运行上面的代码可以得到类似下面的输出:

add data 58: deque([58], maxlen=5)add data 38: deque([58, 38], maxlen=5)add data 39: deque([58, 38, 39], maxlen=5)add data 31: deque([58, 38, 39, 31], maxlen=5)add data 75: deque([58, 38, 39, 31, 75], maxlen=5)add data 6: deque([38, 39, 31, 75, 6], maxlen=5)add data 69: deque([39, 31, 75, 6, 69], maxlen=5)add data 65: deque([31, 75, 6, 69, 65], maxlen=5)add data 3: deque([75, 6, 69, 65, 3], maxlen=5)add data 80: deque([6, 69, 65, 3, 80], maxlen=5)add data 95: deque([69, 65, 3, 80, 95], maxlen=5)add data 56: deque([65, 3, 80, 95, 56], maxlen=5)add data 97: deque([3, 80, 95, 56, 97], maxlen=5)add data 13: deque([80, 95, 56, 97, 13], maxlen=5)add data 90: deque([95, 56, 97, 13, 90], maxlen=5)add data 59: deque([56, 97, 13, 90, 59], maxlen=5)add data 94: deque([97, 13, 90, 59, 94], maxlen=5)add data 81: deque([13, 90, 59, 94, 81], maxlen=5)add data 20: deque([90, 59, 94, 81, 20], maxlen=5)

从输出结果可以看出,当调用add方法向deque中添加新元素时,如果超过了指定的长度,队列的左端就会自动删除一个元素,保证队列的大小不超过指定的长度。在上面的示例中,当添加第6个元素时,队列的长度已经达到了指定的5,因此队列的左端就删除了第1个元素。

2. 缓存数据场景

在缓存数据场景下,我们需要维护一个大小有限的缓存用于存储热门数据,以减少访问数据库的次数。当有新数据需要添加到缓存中时,可以使用deque的add方法将新数据添加到缓存的左端,同时删除缓存中最老的数据。

下面是一个示例代码:

import collectionsclass Cache:    def __init__(self, capacity):        self.cache = collections.deque(maxlen=capacity)    def add(self, key, value):        if key in self.cache:            self.cache.remove(key)        self.cache.appendleft((key, value))        print(f"add key: {key} value: {value}, cache: {self.cache}")    def get(self, key):        for k, v in self.cache:            if k == key:                self.cache.remove((k, v))                self.cache.appendleft((k, v))                print(f"get key: {key} value: {v}, cache: {self.cache}")                return v        print(f"get key: {key} value: None, cache: {self.cache}")        return Nonecache = Cache(3)cache.add("A", 1)cache.add("B", 2)cache.add("C", 3)cache.get("A")  cache.add("D", 4)

在上面的代码中,我们定义了一个名为Cache的类,该类使用deque对象来维护一个固定长度的缓存。当我们调用Cache对象的add方法向缓存中添加新数据时,如果缓存中已经存在相同的key,则需要删除该key对应的旧值。同时调用get方法从缓存中获取数据时,如果数据存在于缓存中,则将其移动到缓存的左端,并返回数据的值,否则返回None。

运行上面的代码后,我们可以看到输出结果如下:

add key: A value: 1, cache: [('A', 1)]add key: B value: 2, cache: [('B', 2), ('A', 1)]add key: C value: 3, cache: [('C', 3), ('B', 2), ('A', 1)]get key: A value: 1, cache: [('A', 1), ('C', 3), ('B', 2)]add key: D value: 4, cache: [('D', 4), ('A', 1), ('C', 3)]

从输出结果可以看出,当添加新数据时,如果缓存已满,则队列的左端会自动删除一个元素,保证队列的大小不超过指定的长度。在上面的示例中,我们在添加第4个元素时,由于缓存已满,队列的左端就删除了最老的数据“B”。

四、总结

本文着重介绍了deque的add方法,并通过实际场景的示例代码演示了该方法的使用。deque的add方法可以高效地维护一个固定大小的元素集合,在实时数据处理和缓存数据场景下都非常有用。如果你还没有使用过deque,那么现在是时候开始了。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/183067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-24 16:26
下一篇 2024-11-24 16:26

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • 使用vscode建立UML图的实践和技巧

    本文将重点介绍在使用vscode在软件开发中如何建立UML图,并且给出操作交互和技巧的指导。 一、概述 在软件开发中,UML图是必不可少的重要工具之一。它为软件架构和各种设计模式的…

    编程 2025-04-29
  • ArcGIS更改标注位置为中心的方法

    本篇文章将从多个方面详细阐述如何在ArcGIS中更改标注位置为中心。让我们一步步来看。 一、禁止标注智能调整 在ArcMap中设置标注智能调整可以自动将标注位置调整到最佳显示位置。…

    编程 2025-04-29
  • 解决.net 6.0运行闪退的方法

    如果你正在使用.net 6.0开发应用程序,可能会遇到程序闪退的情况。这篇文章将从多个方面为你解决这个问题。 一、代码问题 代码问题是导致.net 6.0程序闪退的主要原因之一。首…

    编程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Python创建分配内存的方法

    在python中,我们常常需要创建并分配内存来存储数据。不同的类型和数据结构可能需要不同的方法来分配内存。本文将从多个方面介绍Python创建分配内存的方法,包括列表、元组、字典、…

    编程 2025-04-29
  • 用不同的方法求素数

    素数是指只能被1和自身整除的正整数,如2、3、5、7、11、13等。素数在密码学、计算机科学、数学、物理等领域都有着广泛的应用。本文将介绍几种常见的求素数的方法,包括暴力枚举法、埃…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29

发表回复

登录后才能评论