最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python collections中的雙向隊(duì)列deque簡(jiǎn)單介紹詳解

 更新時(shí)間:2019年11月04日 14:29:06   作者:洛的城  
這篇文章主要介紹了Python collections中的雙向隊(duì)列deque簡(jiǎn)單介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在python神書《Python+Cookbook》中有這么一段話:在隊(duì)列兩端插入或刪除元素時(shí)間復(fù)雜度都是 O(1) ,而在列表的開頭插入或刪除元素的時(shí)間復(fù)雜度為 O(N)。
于是就想驗(yàn)證下。

簡(jiǎn)單使用

基本代碼

from collections import deque
q = deque(maxlen=4)#有固定長(zhǎng)度的雙向隊(duì)列
qq = deque() #無固定長(zhǎng)度
print(dir(q))#看看有哪些可用方法或?qū)傩?

結(jié)果:

['__add__', '__bool__', '__class__', '__contains__', '__copy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'appendleft', 'clear', 'copy', 'count', 'extend', 'extendleft', 'index', 'insert', 'maxlen', 'pop', 'popleft', 'remove', 'reverse', 'rotate']

看到可以append,pop,insert,clear等,還可以像List一樣用中括號(hào) [] 對(duì)某個(gè)index獲取或設(shè)置值。因?yàn)槭请p向隊(duì)列,所以也有左操作函數(shù):appendleft,popleft。額外的還要反轉(zhuǎn)函數(shù)reverse,計(jì)數(shù)函數(shù)count。

使用ipython驗(yàn)證

In [1]: from collections import deque
…: q = deque(maxlen=4)#有固定長(zhǎng)度的雙向隊(duì)列
…: qq = deque() #無固定長(zhǎng)度
…: print(dir(q))#看看有哪些可用方法或?qū)傩?
[‘a(chǎn)dd', ‘bool', ‘class', ‘contains', ‘copy', ‘delattr', ‘delitem', ‘dir', ‘doc', ‘eq', ‘format', ‘ge', ‘getattribute', ‘getitem', ‘gt', ‘hash', ‘iadd', ‘imul', ‘init', ‘init_subclass', ‘iter', ‘le', ‘len', ‘lt', ‘mul', ‘ne', ‘new', ‘reduce', ‘reduce_ex', ‘repr', ‘reversed', ‘rmul', ‘setattr', ‘setitem', ‘sizeof', ‘str', ‘subclasshook', ‘a(chǎn)ppend', ‘a(chǎn)ppendleft', ‘clear', ‘copy', ‘count', ‘extend', ‘extendleft', ‘index', ‘insert', ‘maxlen', ‘pop', ‘popleft', ‘remove', ‘reverse', ‘rotate']
In [2]: q
Out[2]: deque([])
In [3]: q.append(1)
In [4]: q.insert(0,33)
In [6]: q
Out[6]: deque([33, 1])
In [8]: q.appendleft(44)
In [9]: q
Out[9]: deque([44, 33, 1])
In [10]: q.pop()
Out[10]: 1
In [12]: q[1]
Out[12]: 33
In [13]: q
Out[13]: deque([44, 33])
In [14]: q.reverse()
In [15]: q
Out[15]: deque([33, 44])
In [17]: q.clear()
In [18]: q
Out[18]: deque([])

性能測(cè)試

pop和append

#coding:utf8
import datetime,time
from collections import deque
D = deque()
L=[]
def calcTime(func):  
  def doCalcTime():
    sst = int(time.time()*1000)
    func()
    eed = int(time.time()*1000)
    print(func,'cost time:',eed-sst,'ms')
  return doCalcTime

@calcTime
def didDeque():
  for i in range(0,10000000):
    D.append(i)
  while D:
    D.pop()

@calcTime
def didList():
  for i in range(0,10000000):
    L.append(i)
  while L:
    L.pop()
    
if __name__=='__main__':
  didDeque()
  print("------------")
  didList()

運(yùn)行結(jié)果:

<function didDeque at 0x000002D6912A4D08> cost time: 1924 ms
------------
<function didList at 0x000002D6912D4048> cost time: 2420 ms

是快了一些。

insert

#coding:utf8
import datetime,time
from collections import deque
D = deque()
L=[]
def calcTime(func):  
  def doCalcTime():
    sst = int(time.time()*1000)
    func()
    eed = int(time.time()*1000)
    print(func,'cost time:',eed-sst,'ms')
  return doCalcTime

@calcTime
def didDeque():
  for i in range(0,100000):
    D.insert(5,i)
    
@calcTime
def didList():
  for i in range(0,100000):
    L.insert(5,i)

if __name__=='__main__':
  didDeque()
  print("------------")
  didList()

運(yùn)行結(jié)果:

<function didDeque at 0x0000021367F06D08> cost time: 32 ms
------------
<function didList at 0x0000021367F34048> cost time: 3499 ms

快了兩個(gè)數(shù)量級(jí)。想想也明白,一個(gè)是鏈表,插入的時(shí)候只需要改變指針指向,而List是連續(xù)空間,需要移動(dòng)一大堆的元素。

計(jì)算移動(dòng)平均

>>> import numpy as np
>>> from collections import deque
>>> q=deque(maxlen=5)
>>> q.append(1)
>>> q.append(2)
>>> q.append(3)
>>> q.append(4)
>>> q.append(5)
>>> q.append(6)
>>> q
deque([2, 3, 4, 5, 6], maxlen=5)
>>> np.array(q).mean()
4.0

結(jié)語

如果可以,數(shù)據(jù)量大的時(shí)候,用deque代替List的能提升一部分性能。 而由于deque是隊(duì)列可以設(shè)定固定長(zhǎng)度,實(shí)現(xiàn)先入先出。 那么,如在計(jì)算移動(dòng)平均的時(shí)候可以使用,很快捷方便。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python編寫自己的微型Redis

    使用Python編寫自己的微型Redis

    這篇文章主要為大家詳細(xì)介紹了使用Python編寫自己的微型Redis的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2024-03-03
  • Python讀取CSV文件并計(jì)算某一列的均值和方差

    Python讀取CSV文件并計(jì)算某一列的均值和方差

    這篇文章主要介紹了利用Python讀取CSV文件并計(jì)算某一列的均值和方差,這里利用了csv模塊來對(duì)文件進(jìn)行處理,文章通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • python3 cmp實(shí)現(xiàn)方式

    python3 cmp實(shí)現(xiàn)方式

    這篇文章主要介紹了python3 cmp實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python列表的常用操作方法小結(jié)

    python列表的常用操作方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了python字典的常用操作方法,主要內(nèi)容包含Python中列表(List)的詳解操作方法,包含創(chuàng)建、訪問、更新、刪除、其它操作等,需要的朋友可以參考下
    2016-05-05
  • Python中set方法的使用教程詳解

    Python中set方法的使用教程詳解

    在Python中,set是一種集合數(shù)據(jù)類型,表示一個(gè)無序且不重復(fù)的集合。本文主要為大家詳細(xì)介紹了Python中set方法的使用,需要的可以參考一下
    2023-04-04
  • Python3.6使用tesseract-ocr的正確方法

    Python3.6使用tesseract-ocr的正確方法

    今天小編就為大家分享一篇關(guān)于Python3.6使用tesseract-ocr的正確方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • matplotlib 范圍選區(qū)(SpanSelector)的使用

    matplotlib 范圍選區(qū)(SpanSelector)的使用

    這篇文章主要介紹了matplotlib 范圍選區(qū)(SpanSelector)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python開發(fā)游戲的前期準(zhǔn)備

    python開發(fā)游戲的前期準(zhǔn)備

    在本篇文章中我們給大家分享了關(guān)于python開發(fā)游戲的前期準(zhǔn)備以及用到的工具等內(nèi)容,需要的朋友們跟著參考下。
    2019-05-05
  • python開發(fā)微信服務(wù)號(hào)消息推送示例

    python開發(fā)微信服務(wù)號(hào)消息推送示例

    這篇文章主要為大家介紹了python開發(fā)微信服務(wù)號(hào)消息推送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Python中decimal.Decimal類型和float類型的比較

    Python中decimal.Decimal類型和float類型的比較

    這篇文章主要介紹了Python中decimal.Decimal類型和float類型的比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

阜宁县| 临夏县| 登封市| 深圳市| 安化县| 林口县| 绿春县| 盐城市| 沾益县| 濮阳县| 旌德县| 子洲县| 福清市| 普洱| 永定县| 历史| 寿光市| 西乡县| 江山市| 田阳县| 新沂市| 虞城县| 凤山市| 桐乡市| 新郑市| 仙桃市| 宁明县| 禄劝| 米林县| 宁陕县| 洛浦县| 油尖旺区| 阜南县| 台州市| 武汉市| 夏邑县| 津市市| 灵璧县| 新巴尔虎左旗| 理塘县| 都匀市|