新聞中心
collections模塊實(shí)現(xiàn)一些特定的數(shù)據(jù)類型,可以替代Python中常用的內(nèi)置數(shù)據(jù)類型如dict, list, set, tuple,簡(jiǎn)單說(shuō)就是對(duì)基本數(shù)據(jù)類型做了更上一層的處理。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到岫巖網(wǎng)站設(shè)計(jì)與岫巖網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋岫巖地區(qū)。
1. deque雙端隊(duì)列
平常我們使用的python內(nèi)置list類的append,extend,pop方法都是從list的尾部執(zhí)行的(pop()默認(rèn)彈出最后一個(gè)元素)。在使用的時(shí)候,list很像是一種棧結(jié)構(gòu)(LIFO)。不同的是list靈活性更強(qiáng),在棧的基礎(chǔ)上有動(dòng)態(tài)插入的方法,即insert(index,obj)和索引、切片等操作。強(qiáng)大的list似乎也可以實(shí)現(xiàn)隊(duì)列(FIFO),但由于它實(shí)在太靈活了,列表中的元素極容易改變,在使用時(shí)令人總是不那么放心。為了實(shí)現(xiàn)更好的隊(duì)列結(jié)構(gòu),一般程序員會(huì)自己實(shí)現(xiàn)一個(gè)類。
collections模塊中為我們提供的雙端隊(duì)列是在隊(duì)列的基礎(chǔ)上實(shí)現(xiàn)頭尾兩端可append、可pop。另外還有insert,rotate等方法,也是相當(dāng)靈活的 關(guān)鍵方法:
append() #從右端添加元素(與list同) appendleft() #從左端添加元素(與list同) extend() #從右端逐個(gè)添加可迭代對(duì)象(與list同) extendleft() #從左端逐個(gè)添加可迭代對(duì)象(與list同) pop() #從右端彈出元素(與list同) popleft() #從左端彈出數(shù)據(jù) count() #統(tǒng)計(jì)隊(duì)列中的元素個(gè)數(shù)(與list同) insert(index,obj) #在指定位置插入元素(與list同) rotate() #旋轉(zhuǎn)隊(duì)列
基本使用例子:
from collections import deque
d = deque()
#增加數(shù)據(jù)
d.append('1')
d.append('2')
d.appendleft('3')
l = ['4','5']
d.extend(l)
d.extendleft(l)
print(d)
#計(jì)算deque元素個(gè)數(shù)
print(d.count('5'))
#循環(huán)移動(dòng)
d.rotate(1)
print(d)
d.rotate(-1)
print(d)
#計(jì)算股票和倉(cāng)庫(kù)存貨常用的移動(dòng)平均數(shù)
from collections import deque
import itertools
def moving_average(iterable,n=3):
it = iter(iterable)
d = deque(itertools.islice(it,n-1)) #迭代出前2個(gè)數(shù)據(jù)
print(d)
d.appendleft(0) #防止第一次運(yùn)行算法時(shí)候把第一個(gè)數(shù)據(jù)刪除
s = sum(d)
print(d)
print(s)
for elem in it:
s += elem-d.popleft()
d.append(elem)
yield s/float(n)
l = [10,20,18,27,15]
for average in moving_average(l):
print(average)
2. defaultdict 默認(rèn)字典
我們平常在使用python內(nèi)置的dict的時(shí)候,根據(jù)鍵key去查詢對(duì)應(yīng)的value值,如果不存在對(duì)應(yīng)的key,會(huì)報(bào)錯(cuò)(KeyError)。但是在defaultdict就會(huì)會(huì)出現(xiàn)這個(gè)問(wèn)題。
例子:
dd = defaultdict(lambda:"none") #只需要在定義的時(shí)候?yàn)椴淮嬖诘膋ey定義指定的顯示值
dd["a"] = "apple"
dd["b"] = "banana"
print(dd["c"])
print(dd)
結(jié)果:
>>>none
>>>defaultdict(function
at 0x0000023B1C1919D8>, {
'c':
'none',
'a':
'apple',
'b':
'banana'})
由第二條的結(jié)果可以看出,defaultdict將不存在的鍵專門用一個(gè)字典來(lái)存放,而存在的鍵存放在另外一個(gè)字典中。當(dāng)需要查詢?cè)貢r(shí),如果遇到?jīng)]有的鍵key,就會(huì)獲取第一字典中預(yù)先設(shè)定好的顯示值。
3. OrderDict 有序字典
在使用python內(nèi)置的dict時(shí),用print()打印出整個(gè)字典,會(huì)發(fā)現(xiàn)前后兩次字典的鍵值對(duì)順序是不一樣的(筆者猜測(cè)是前后兩次的hash值不一樣的緣故)。而在有序字典OderDict中,這種現(xiàn)象不會(huì)在發(fā)生。
例子:
od = OrderedDict()
od["1"] = "one"
od["2"] = "two"
od["3"] = "three"
od["4"] = "four"
od["5"] = "five"
結(jié)果:
OrderedDict([('1', 'one'), ('2', 'two'), ('3', 'three'), ('4', 'four'), ('5', 'five')])
文章題目:pythoncollections模塊使用方法
文章分享:http://www.dlmjj.cn/article/djgcdgj.html


咨詢
建站咨詢
