黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Python工具庫之collections

Python工具庫之collections

來源:千鋒教育
發布人:xqq
時間: 2023-11-07 12:54:22 1699332862

collection在英文當中有容器的意思,所以顧名思義,這是一個容器的集合。這個庫當中的容器很多,有一些不是很常用,本篇文章選擇了其中最常用的幾個,一起介紹給大家。

defaultdict

defaultdict可以說是這個庫當中使用最簡單的一個,并且它的定義也很簡單,我們從名稱基本上就能看得出來。它解決的是我們使用dict當中最常見的問題,就是key為空的情況。

在正常情況下,我們在dict中獲取元素的時候,都需要考慮key為空的情況。如果不考慮這點,那么當我們獲取了一個不存在的key,會導致系統拋出異常。我們當然可以在每次get之前寫一個if判斷,但是這很麻煩,比如:

ifkeyindict:

returndict[key]

else:

returnNone

當然,這是最笨的方法,dict當中為我們提供了帶默認值的get方法。比如,我們可以寫成:

returndict.get(key,None)

這樣,當key不在dict當中存在的時候,會自動返回我們設置的默認值。這個省去了很多麻煩的判斷,但是在一些特殊情況下仍然存在一點問題。舉個例子,比如當key存在重復,我們希望將key相同的value存進一個list當中,而不是只保留一個。這種情況下寫成代碼就會比較復雜:

data=[(1,3),(2,1),(1,4),(2,5),(3,7)]

d={}

fork,vindata:

ifkind:

d[k].append(v)

else:

d[k]=[v]

由于dict的value是一個list,所以我們還是需要判斷是否為空,不能直接使用默認值,間接操作當然可以,但是還是不夠簡單:

fork,vindata:

cur=d.get(k,[])

cur.append(v)

d[k]=v

這和使用if區別并不大,為了完美解決這個問題,我們可以使用collections當中的defaultdict:

fromcollectionsimportdefaultdict

d=defaultdict(list)

fork,vindata:

d[k].append(v)

使用defaultdict之后,如果key不存在,容器會自動返回我們預先設置的默認值。需要注意的是defaultdict傳入的默認值可以是一個類型也可以是一個方法。如果我們傳入int,那么默認值會被設置成int()的結果,也就是0,如果我們想要自定義或者修改,我們可以傳入一個方法,比如:

d=defaultdict(lambda:3)

fork,vindata:

d[k]+=v

Counter

這是一個非常常用和非常強大的工具,我們經常用到。

在我們實際的編程當中,我們經常遇到一個問題,就是數數和排序。比如說我們在分析文本的時候,會得到一堆單詞。其中可能有大量的長尾詞,在整個文本當中可能只出現過寥寥幾次。于是我們希望計算一下這些單詞出現過的數量,只保留出現次數最高的若干個。

這個需求讓我們自己實現當然也不困難,我們完全可以創建一個dict,然后對這些單詞一個一個遍歷。原本我們還需要考慮單詞之前沒有出現過的情況,如果我們上面說的defaultdict,又要簡單許多。但是我們還是少不了計數然后排序的步驟,如果使用Counter這個步驟會縮減成一行代碼。

舉個例子:

words=['apple','apple','pear','watermelon','pear','peach']

fromcollectionsimportCounter

counter=Counter(words)

>>>print(counter)

Counter({'apple':2,'pear':2,'watermelon':1,'peach':1})

我們直接將一個list傳入Counter中作為參數,它會自動為我們替當中的每個元素計數。

如果我們要篩選topK,也非常簡單,它為我們提供了most_common方法,我們只需要傳入需要求的K即可:

counter.most_common(1)

[('apple',2)]

除此之外,它的構造函數還接收dict類型。我們可以直接通過一個value是int類型的dict來初始化一個Counter,比如:

c=Counter({'apple':5,'pear':4})

c=Counter(apple=4,pear=3)

并且,它還支持加減法的操作,比如我們可以將兩個Counter相加,它會自動將兩個Counter合并,相同的key對應的value累加。相減也是同理,會將能對應的value做減法,被減的key對應不上的會保留,而減數中對應不上的key則會被丟棄。并且需要注意,Counter支持value為負數。

deque

我們都知道queue是隊列,deque也是隊列,不過稍稍特殊一些,是雙端隊列。對于queue來說,只允許在隊尾插入元素,在隊首彈出元素。而deque既然稱為雙端隊列,那么說明它的隊首和隊尾都支持元素的插入和彈出。相比于普通的隊列,要更加靈活一些。

除了常用的clear、copy、count、extend等api之外,deque當中最常用也是最核心的api還有append、pop、appendleft和popleft。從名字上我們就看得出來,append和pop和list的append和pop一樣,而appendleft和popleft則是在隊列左側,也就是頭部進行pop和append的操作。非常容易理解。

在日常的使用當中,真正用到雙端隊列的算法其實不太多。大多數情況下我們使用deque主要有兩個原因,第一個原因是deque收到GIL的管理,它是線程安全的。而list則沒有GIL鎖,因此不是線程安全的。也就是說在并發場景下,list可能會導致一致性問題,而deque不會。另一個原因是deque支持固定長度,當長度滿了之后,當我們繼續append時,它會自動彈出最早插入的數據。

比如說當我們擁有海量的數據,我們不知道它的數量,但是想要保留最后出現的指定數量的數據的時候,就可以使用deque。

fromcollectionsimportdeque

dque=deque(maxlen=10)

#假設我們想要從文件當中獲取最后10條數據

foriinf.read():

dque.append(i)

namedtuple

namedtuple很特殊,它涉及到元編程的概念。簡單介紹一下元編程的概念,我們不做過多的深入。簡而言之,就是在常見的面向對象當中。我們都是定義類,然后通過類的構造函數來創建實例。而元編程指的是我們定義元類,根據元類創建出來的并不是一個實例,而是一個類。如果用模具和成品來分別比喻類和實例的話,元類相當于是模具的模具。

namedtuple是一個非常簡單的元類,通過它我們可以非常方便地定義我們想要的類。

它的用法很簡單,我們直接來看例子。比如如果我們想要定義一個學生類,這個類當中有name、score、age這三個字段,那么這個類會寫成:

classStudent:

def__init__(self,name=None,score=None,age=None):

self.name=name

self.score=score

self.age=age

這還只是粗略的寫法,如果考慮規范,還需要定義property等注解,又需要很多代碼。如果我們使用namedtuple可以簡化這個工作,我們來看代碼:

fromcollectionsimportnamedtuple

#這個是類,columns也可以寫成'namescoreage',即用空格分開

Student=namedtuple('Student',['name','score','age'])

#這個是實例

student=Student(name='xiaoming',score=99,age=10)

print(student.name)

通過使用namedtuple,我們只需要一行就定義了一個類,但是這樣定義的類是沒有缺失值的,但是namedtuple很強大,我們可以通過傳入defaults參數來定義缺失值。

Student=namedtuple('Student',['name','score','age'],defaults=(0,0))

可以注意到,雖然我們定義了三個字段,但是我們只設置了兩個缺失值。在這種情況下,namedtuple會自動將缺失值匹配上score和age兩個字段。因為在Python的規范當中,必選參數一定在可選參數前面。所以nuamdtuple會自動右對齊。

以上內容為大家介紹了Python工具庫之collections,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

tags: python培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
精品毛片视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美日本免费| 国产a毛片| 久久国产精品只做精品| 毛片高清| 99色视频在线观看| 色综合久久天天综合| 精品国产香蕉伊思人在线又爽又黄| 午夜激情视频在线观看| 国产麻豆精品| 日韩一级黄色大片| 国产网站免费在线观看| 国产亚洲免费观看| 久久久久久久久综合影视网| 国产成人啪精品| 国产高清在线精品一区a| 国产极品精频在线观看| 亚洲女人国产香蕉久久精品| 成人免费观看网欧美片| 国产伦精品一区二区三区无广告| 久久久久久久网| 午夜在线影院| 久久成人综合网| 色综合久久天天综线观看| 精品视频在线观看一区二区三区| 国产91丝袜在线播放0| 免费毛片基地| 免费国产在线视频| 黄色短视屏| 亚欧成人乱码一区二区| 国产不卡福利| 欧美一级视频免费观看| 久久久久久久网| 久久福利影视| 高清一级毛片一本到免费观看| 免费国产在线视频| 日韩一级黄色大片| 99色视频在线观看| 国产一区免费观看| 青青久久国产成人免费网站| 精品视频免费在线| 一级毛片视频播放| 日韩女人做爰大片| 91麻豆精品国产片在线观看| 日韩在线观看免费| 日韩在线观看视频黄| 黄色短视屏| 成人在激情在线视频| 国产一区免费在线观看| 精品视频在线观看一区二区三区| 一级毛片视频在线观看| 久久久久久久男人的天堂| 成人a大片在线观看| 日韩免费在线| 久久精品店| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 91麻豆精品国产自产在线 | 欧美大片aaaa一级毛片| 久久久久久久网| 欧美激情一区二区三区视频高清| 久久成人综合网| 成人免费观看男女羞羞视频| 成人免费观看网欧美片| 黄视频网站免费看| 成人免费一级纶理片 | 日韩av片免费播放| 欧美激情伊人| 香蕉视频一级| 欧美a级片免费看| 国产麻豆精品免费密入口| 欧美一级视| 亚洲 国产精品 日韩| 美女免费精品高清毛片在线视| 日本在线www| 一级片免费在线观看视频| 美女免费毛片| 中文字幕97| 99热精品在线| 天天做人人爱夜夜爽2020| 日韩中文字幕在线观看视频| 99久久精品国产国产毛片| 一级毛片看真人在线视频| 国产一区免费在线观看| 你懂的福利视频| 国产成人精品综合久久久| 91麻豆精品国产自产在线| 日韩免费在线视频| 沈樵在线观看福利| 精品在线免费播放| 成人免费一级纶理片 | 九九热国产视频| 亚洲精品久久玖玖玖玖| 999久久狠狠免费精品| 成人在激情在线视频| 99久久精品国产高清一区二区| 可以免费看污视频的网站| 欧美一区二区三区在线观看| 韩国三级一区| 国产一级生活片| 国产麻豆精品| 美国一区二区三区| 国产91视频网| 国产一区二区精品久久| 四虎影视久久久免费| 美女免费精品视频在线观看| 成人免费网站久久久| 成人免费高清视频| 九九久久99| 一级毛片视频播放| 青青久久精品| 欧美α片无限看在线观看免费| 青青久久精品国产免费看| 日韩女人做爰大片| 精品视频一区二区三区| 日本特黄特色aaa大片免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美大片一区| 久久国产影院| 亚洲精品久久久中文字| 国产精品自拍一区| 成人免费观看网欧美片| 99久久精品国产麻豆| 国产麻豆精品免费密入口| 韩国三级视频网站| 欧美激情一区二区三区视频 | 天天色成人网| 精品国产一区二区三区免费| 国产视频久久久| 色综合久久手机在线| 尤物视频网站在线观看| 色综合久久天天综合| 麻豆污视频| 香蕉视频一级| 欧美α片无限看在线观看免费| 成人免费网站视频ww| 精品视频免费观看| 韩国毛片免费| 一级毛片看真人在线视频| 精品国产一区二区三区国产馆| 999久久66久6只有精品| 黄色福利片| 99热视热频这里只有精品| 欧美一区二区三区在线观看| 99色视频在线观看| 国产原创视频在线| 欧美激情一区二区三区视频高清| 欧美a级成人淫片免费看| 九九九网站| 日韩在线观看视频网站| 九九久久国产精品| 韩国三级视频网站| 欧美大片一区| 欧美另类videosbestsex| 亚洲女人国产香蕉久久精品| 国产精品12| 精品视频免费在线| 国产不卡在线观看| 日韩一级精品视频在线观看| 国产一区精品| 91麻豆国产福利精品| 精品视频免费在线| 国产视频一区二区在线播放| 国产一区二区精品| 国产一级生活片| 成人免费观看男女羞羞视频| 一级女性全黄久久生活片| 91麻豆tv| 国产视频一区二区三区四区| 国产a一级| 日韩免费片| 国产成人女人在线视频观看| 91麻豆精品国产高清在线| 色综合久久天天综合观看| 欧美国产日韩精品| 香蕉视频久久| 成人av在线播放| 久久99爰这里有精品国产| 亚洲wwwwww| 青青青草视频在线观看| 久久久久久久网| 一本高清在线| 天堂网中文在线| 久久福利影视| 黄视频网站在线观看| 国产成人女人在线视频观看| 国产高清视频免费观看| 亚洲第一视频在线播放| 国产a视频| 天天色成人网| 久草免费资源| 韩国三级视频网站| 精品视频在线观看免费 | 亚洲 欧美 成人日韩| 九九干| 精品国产香蕉伊思人在线又爽又黄| 沈樵在线观看福利| 美女免费精品高清毛片在线视| 精品国产香蕉伊思人在线又爽又黄| 精品久久久久久中文|