欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python內(nèi)置模塊Collections的使用教程詳解

 更新時(shí)間:2022年03月22日 11:28:08   作者:Candy.W  
collections 是 Python 的一個(gè)內(nèi)置模塊,所謂內(nèi)置模塊的意思是指 Python 內(nèi)部封裝好的模塊,無需安裝即可直接使用。本文將詳解介紹Collections的使用方式,需要的可以參考一下

1、模塊說明

collections 是 Python 的一個(gè)內(nèi)置模塊,所謂內(nèi)置模塊的意思是指 Python 內(nèi)部封裝好的模塊,無需安裝即可直接使用。

  • collections 包含了一些特殊的容器,針對(duì) Python 內(nèi)置的容器,例如: list、dict、set、tuple,提供了另一種選擇。
  • namedtuple: 可以創(chuàng)建包含名稱的 tuple。
  • deque: 類似于 list 的容器,可以快速的在隊(duì)列頭部和尾部添加、刪除元素。
  • OrderedDict: dict的子類,可以記住元素的添加順序。
  • defaultdict: dict的子類,可以調(diào)用提供默認(rèn)值的函數(shù)。
  • Counter: dict的子類,計(jì)算可hash的對(duì)象。

2、 實(shí)戰(zhàn)代碼

(1) testNamedTuple函數(shù)

Python 提供了很多非常好用的基本類型,比如不可變類型 tuple,我們可以輕松地用它來表示一個(gè)二元向量。

namedtuple 是一個(gè)函數(shù),它用來創(chuàng)建一個(gè)自定義的 tuple 對(duì)象,并且規(guī)定了 tuple 元素的個(gè)數(shù),并可以用屬性而不是索引來引用 tuple 的某個(gè)元素。

如此一來,我們用 namedtuple 可以很方便地定義一種數(shù)據(jù)類型,它具備 tuple 的不變性,又可以根據(jù)屬性來引用,使用十分方便。

本示例中我們使用了一個(gè)三維坐標(biāo) x,y,z 來定義一個(gè) tuple 對(duì)象,對(duì)象元素有3個(gè),然后通過坐標(biāo)值來引用相應(yīng)的值即可。

from collections import namedtuple
from collections import deque
from collections import defaultdict
from collections import OrderedDict
from collections import Counter
def testNamedTuple():
    vector=namedtuple('vector',['x','y','z'])
    flag=vector(3,4,5)
    print(type(flag))
    print(isinstance(flag,vector))
    print(isinstance(flag,tuple)) #通過這里的判定我們就可以知曉它是元組類型
    print(flag.x,flag.y,flag.z)

(2) testDeque函數(shù)

deque是棧和隊(duì)列的一種廣義實(shí)現(xiàn),deque是 "double-end queue" 的簡(jiǎn)稱。

deque支持線程安全、有效內(nèi)存地以近似O(1)的性能在 deque 的兩端插入和刪除元素,盡管 list 也支持相似的操作,但是它主要在固定長(zhǎng)度操作上的優(yōu)化,從而在 pop(0) 和 insert(0,v)(會(huì)改變數(shù)據(jù)的位置和大小)上有O(n)的時(shí)間復(fù)雜度。

在數(shù)據(jù)結(jié)構(gòu)中,我們知道隊(duì)列和堆棧是兩個(gè)非常重要的數(shù)據(jù)類型,一個(gè)先進(jìn)先出,一個(gè)后進(jìn)先出。

在 python 中,使用 list 存儲(chǔ)數(shù)據(jù)時(shí),按索引訪問元素很快,但是插入和刪除元素就很慢,因?yàn)?list 是線性存儲(chǔ),數(shù)據(jù)量大的時(shí)候,插入和刪除效率很低。

deque是為了高效實(shí)現(xiàn)插入和刪除操作的雙向鏈表結(jié)構(gòu),非常適合實(shí)現(xiàn)隊(duì)列和堆棧這樣的數(shù)據(jù)結(jié)構(gòu)。

def testDeque():
    list1=[x*x for x in range(101)]
    delist=deque(list1) #對(duì)列表進(jìn)行了一次再處理,讓list1列表變成了雙向鏈表結(jié)構(gòu)
    delist.append(1000)#將x添加到deque的右側(cè)
    delist.appendleft(2000)#將x添加到deque的左側(cè)
    delist.pop(1000)#移除和返回deque中最右側(cè)的元素,如果沒有元素,將會(huì)報(bào)出IndexError;
    delist.popleft()#移除和返回deque中最左側(cè)的元素,如果沒有元素,將會(huì)報(bào)出IndexError;
    delist.count(1)#返回deque中元素等于1的個(gè)數(shù)
    delist.remove(10000)#移除第一次出現(xiàn)的value,如果沒有找到,報(bào)出ValueError;
    delist.reverse()#反轉(zhuǎn)deque中的元素,并返回None;
    list2=[1,3,4,5]
    delist.extend(list2)#將可迭代變量iterable中的元素添加至deque的右側(cè)
    delist.extendleft(list2)#將變量iterable中的元素添加至deque的左側(cè),往左側(cè)添加序列的順序與可迭代變量iterable中的元素相反
    delist.maxlen()#只讀的屬性,deque的最大長(zhǎng)度,如果無解,就返回None
    delist.rotate(1)#從右側(cè)反轉(zhuǎn)n步,如果n為負(fù)數(shù),則從左側(cè)反轉(zhuǎn)
    delist.clear()#將deque中的元素全部刪除,最后長(zhǎng)度為0;

(3)testDefaultdict函數(shù)

defaultdict是內(nèi)置數(shù)據(jù)類型 dict 的一個(gè)子類,基本功能與 dict 一樣,只是重寫了一個(gè)方法__missing__(key)和增加了一個(gè)可寫的對(duì)象變量 default_factory。

使用 dict 字典類型時(shí),如果引用的 key 不存在,就會(huì)拋出 KeyError。如果希望 Key 不存在時(shí),返回一個(gè)默認(rèn)值,就可以用 defaultdict。

def testDefaultdict():
    dict1= defaultdict(lambda: 'default') #Key不存在時(shí),返回一個(gè)默認(rèn)值,就可以用default,defaultdict的其他行為跟dict是完全一樣的
    dict1["k1"]="v1"
    print(dict1["k2"])
    list2= [('yellow',11),('blue',2),('yellow',3),('blue',4),('red',5),('red',10)]
    dict1 = defaultdict(list)#使用list作為default_factory,很容易將一個(gè)key-value的序列轉(zhuǎn)換為一個(gè)關(guān)于list的詞典
    for k,v in list2:
        dict1[k].append(v)
    print(dict1)

(4) testOrderedDict函數(shù)

OrderedDict類似于正常的詞典,只是它記住了元素插入的順序,當(dāng)在有序的詞典上迭代時(shí),返回的元素就是它們第一次添加的順序。這樣 dict 就是一個(gè)有序的字典。

使用 dict 時(shí),key 是無序的。在對(duì) dict 做迭代時(shí),我們無法確定 key 的順序。但是如果想要保持 key 的順序,可以用 OrderedDict。

def testOrderedDict():
    dict1=dict([('aaa', 111), ('ddd',444),('bbb', 222), ('ccc', 333)])
    print(dict1)
    dict2 = OrderedDict([('ddd',444),('aaa', 111), ('bbb', 222), ('ccc', 333)])#OrderedDict的key會(huì)按照插入的順序排列,不是key本身排序
    print(dict2)
    dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444}
    # dict sorted by key
    dict4=OrderedDict(sorted(dict3.items(), key=lambda t: t[0]))
    print("dict4",dict4)
    # dict sorted by value
    dict5=OrderedDict(sorted(dict3.items(), key=lambda t: t[1]))
    print("dict5",dict5)
    # dict sorted by length of key string
    dict6 = OrderedDict(sorted(dict3.items(), key=lambda t: len(t[0])))
    print("dict6",dict6)
    print(dict6['apple'])

(5) testCounter函數(shù)

def testCounter():
    '''counter可以支持方便、快速的計(jì)數(shù)'''
    str1="abcdefgabcedergeghdjlkabcdefe" #將可迭代的字符串初始化counter
    str2=Counter(str1)
    print(str2) #從輸出的內(nèi)容來看,Counter實(shí)際上也是dict的一個(gè)子類
    for k,v in str2.items():
        print(k,v)
    dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444,"apples":2}#將dict初始化counter
    dict4=Counter(dict3)
    print(dict4)
    print(dict4["test"])#Counter對(duì)象類似于字典,如果某個(gè)項(xiàng)缺失,會(huì)返回0,而不是報(bào)出KeyError;
    dict5=Counter(high=9,age=33,money=-1)#將args初始化counter
    print(dict5)
    #elements返回一個(gè)迭代器,每個(gè)元素重復(fù)的次數(shù)為它的數(shù)目,順序是任意的順序,如果一個(gè)元素的數(shù)目少于1,那么elements()就會(huì)忽略它;
    list1=list(dict5.elements())
    print(list1)
    #most_common返回一個(gè)列表,包含counter中n個(gè)最大數(shù)目的元素
    #,如果忽略n或者為None,most_common()將會(huì)返回counter中的所有元素,元素有著相同數(shù)目的將會(huì)以任意順序排列;
    str1 = "abcdefgabcedergeghdjlkabcdefe"
    list1=Counter(str1).most_common(3)
    print(list1)
if __name__ == '__main__':
    # testNamedTuple()
    # testCounter()
    testDefaultdict()
    # testDeque()
    # testOrderedDict()

到此這篇關(guān)于Python內(nèi)置模塊Collections的使用教程詳解的文章就介紹到這了,更多相關(guān)Python Collections內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)微信自動(dòng)回復(fù)及批量添加好友功能

    python實(shí)現(xiàn)微信自動(dòng)回復(fù)及批量添加好友功能

    這篇文章主要介紹了python實(shí)現(xiàn)微信自動(dòng)回復(fù)及python 批量生成微信添加好友截圖功能的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 一篇文章帶你了解python標(biāo)準(zhǔn)庫--sys模塊

    一篇文章帶你了解python標(biāo)準(zhǔn)庫--sys模塊

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫之Sys模塊使用詳解,本文講解了使用sys模塊獲得腳本的參數(shù)、處理模塊、使用sys模塊操作模塊搜索路徑、使用sys模塊查找內(nèi)建模塊、使用sys模塊查找已導(dǎo)入的模塊等使用案例,需要的朋友可以參考下
    2021-08-08
  • python如何開啟多線程

    python如何開啟多線程

    這篇文章主要介紹了python如何開啟多線程問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python利用zhconv模塊進(jìn)行簡(jiǎn)繁體字轉(zhuǎn)換的案例演示

    Python利用zhconv模塊進(jìn)行簡(jiǎn)繁體字轉(zhuǎn)換的案例演示

    zhconv是一個(gè)Python庫,提供了簡(jiǎn)體字和繁體字之間的轉(zhuǎn)換功能,本教程將向你展示如何使用zhconv模塊來實(shí)現(xiàn)簡(jiǎn)繁體字的互轉(zhuǎn),并附帶一個(gè)案例演示,感興趣的朋友可以參考一下
    2024-05-05
  • 詳解Tensorflow數(shù)據(jù)讀取有三種方式(next_batch)

    詳解Tensorflow數(shù)據(jù)讀取有三種方式(next_batch)

    本篇文章主要介紹了Tensorflow數(shù)據(jù)讀取有三種方式(next_batch),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • python隨機(jī)數(shù)分布random測(cè)試

    python隨機(jī)數(shù)分布random測(cè)試

    這篇文章主要為大家詳細(xì)介紹了python隨機(jī)數(shù)分布random的測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 用Python編寫一個(gè)簡(jiǎn)單的Lisp解釋器的教程

    用Python編寫一個(gè)簡(jiǎn)單的Lisp解釋器的教程

    這篇文章主要介紹了用Python編寫一個(gè)簡(jiǎn)單的Lisp解釋器的教程,Lisp是一種源碼簡(jiǎn)單的函數(shù)式編程語言,本文主要介紹對(duì)其中的一個(gè)子集Scheme的解釋器開發(fā),需要的朋友可以參考下
    2015-04-04
  • Python詳細(xì)介紹模型封裝部署流程

    Python詳細(xì)介紹模型封裝部署流程

    本文實(shí)例講述了Python模型封裝部署的原理與實(shí)現(xiàn)方法。封裝即是隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python unichr函數(shù)知識(shí)點(diǎn)總結(jié)

    python unichr函數(shù)知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python unichr函數(shù)的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python內(nèi)建類型str源碼學(xué)習(xí)

    Python內(nèi)建類型str源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python內(nèi)建類型str的源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論