提升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/zh-hk/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

發表回復

登錄後才能評論