日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
標(biāo)準(zhǔn)庫Collections中4個常用的數(shù)據(jù)結(jié)構(gòu)

collections 庫是標(biāo)準(zhǔn)庫的一部分,里面有很多數(shù)據(jù)結(jié)構(gòu),在列表、字典、元組的基礎(chǔ)上做了很多修改和提升。

創(chuàng)新互聯(lián)成立與2013年,先為運(yùn)城等服務(wù)建站,運(yùn)城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為運(yùn)城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

今天就來說說最有用的幾個。

1、deque

它實(shí)現(xiàn)了兩端都可以操作的隊(duì)列,相當(dāng)于雙端隊(duì)列,與可以指定最多存儲多少個元素,與 Python 的基本數(shù)據(jù)類型列表很相似。

 
 
 
  1. from collections import deque 
  2.  
  3. a = deque(maxlen=3) 

上述代碼定義了大小為 3 的雙端隊(duì)列,當(dāng)你插入第 4 個元素時,隊(duì)列的第一個元素會被刪除。

 
 
 
  1. a = deque(maxlen=3) 
  2. a.append(1) # a = [1] 
  3. a.append(2) # a = [1, 2] 
  4. a.append(3) # a = [1, 2, 3] FULL 
  5. a.append(4) # a = [2,3,4] 

因?yàn)檫@是一個雙端隊(duì)列,你可以在隊(duì)列的首位插入元素,也可以在首尾刪除元素,它們的時間復(fù)雜度都是 O(1):

  • append(x) 在隊(duì)列尾部插入 x
  • appendleft(x) 在隊(duì)列頭部插入 x
  • pop() 在隊(duì)列尾部刪除一個元素,并返回
  • popleft() 在隊(duì)列頭部刪除一個元素,并返回
 
 
 
  1. a = deque(maxlen = 10) 
  2. a.append(1) # a = [1] 
  3. a.append(2) # a = [1, 2] 在隊(duì)列尾部插入 2 
  4. a.appendleft(3)# a = [3, 1, 2] 在隊(duì)列頭部插入 3 
  5. x = a.pop() # a = [3, 1], x = 2 刪除隊(duì)列尾部元素 2 
  6. y = a.popleft() # a = [1], y = 3 刪除隊(duì)列頭部元素 3 

2、namedtuple

這個庫提供了命名的元組,可以通過指定的名稱來訪問,例如:

 
 
 
  1. from collections import namedtuple 
  2. Point = namedtuple("Point", ['x','y','z']) 
  3. p = Point(3,4,5) 
  4. print(p.x, p.y, p.z) #Output: 3, 4, 5 

namedtuple 函數(shù)把第一個參數(shù)作為新元組的名稱,第二個參數(shù)就是元組內(nèi)元素的名稱映射,可以是一個字符串列表,也可以是空格或逗號分割的字符串。

 
 
 
  1. Point = namedtuple("Point", "x y z") 
  2. Point = namedtuple("Point", "x,y,z") 

也可以這樣初始化,非常靈活:

 
 
 
  1. p1 = Point(3,4,5) 
  2. p2 = Point(x=3, y=4, z=5) 
  3. p3 = Point._make([3,4,5]) 

還可以使用 namedtuple 來設(shè)置默認(rèn)值:

 
 
 
  1. PointDef = namedtuple("PointDef", "x, y, z", defaults = [0,0,0]) 
  2. p = PointDef(x=1) # p is (1,0,0) 

如果你定義了三個名稱,卻提供了兩個默認(rèn)值,那么只有最后兩個會被賦予默認(rèn)值:

 
 
 
  1. Point = namedtuple("Point", "x y z",defaults ="[0, 0]) 
  2. print(Point._field_defaults) 
  3. # output: {“y”: 0, “z”: 0} 

3、Counter

計數(shù)器 Counter 非常有用,尤其當(dāng)你需要統(tǒng)計列表或可迭代對象中元素的數(shù)量時:

 
 
 
  1. from collections import Counter 
  2. c = Counter(“aaabbccdaaa”) 
  3. print(c) 
  4. #Output: Counter({'a': 6, 'b': 2, 'c': 2, 'd': 1}) 

還可以方便的統(tǒng)計頻率前幾大,比如統(tǒng)計出現(xiàn)頻率最高的兩個元素:

 
 
 
  1. print(c.most_common(2)) 
  2. #output: [('a', 6), ('b', 2)] 

還可以動態(tài)增刪字符串,然后統(tǒng)計:

 
 
 
  1. c = Counter("abbc") # {"a":1, "b":2, "c":1} 
  2. c.update("bccd") # {"a":1, "b":3, "c":3, "d":1} 
  3. c.subtract("bbc") # {"a":1, "b":1, "c":2, "d":1} 

4、defaultdict

defaultdict 和 dict 差不多,但是可以提供 dict 的 values 的默認(rèn)數(shù)據(jù)類型,比如:

 
 
 
  1. from collections import defaultdict 
  2. toAdd =[("key1", 3), ("key2", 5), ("key3", 6), ("key2", 7)] 
  3. d = defaultdict(list) 
  4. for key, val in toAdd: 
  5.   d[key].append(val) 
  6. print(d) # {"key1":[3], "key2":[5, 7], "key3":[6]} 

如果你用 dict,可能要這樣寫:

 
 
 
  1. d = dict() 
  2. for key, val in toAdd: 
  3.   if key in d: 
  4.     d[key].append(val) 
  5.   else: 
  6.     d[key] = [val] 

或者是這樣的:

 
 
 
  1. d = dict() 
  2. for key, val in toAdd: 
  3.   d.setdefault(key, []).append(val) 

總之,defaultdict 是簡單和快捷的。


標(biāo)題名稱:標(biāo)準(zhǔn)庫Collections中4個常用的數(shù)據(jù)結(jié)構(gòu)
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/dpiooji.html