自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

標(biāo)準(zhǔn)庫(kù) Collections 中 4 個(gè)常用的數(shù)據(jù)結(jié)構(gòu)

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

[[427289]]

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

今天就來(lái)說(shuō)說(shuō)最有用的幾個(gè)。

1、deque

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

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

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

  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)檫@是一個(gè)雙端隊(duì)列,你可以在隊(duì)列的首位插入元素,也可以在首尾刪除元素,它們的時(shí)間復(fù)雜度都是 O(1):

  • append(x) 在隊(duì)列尾部插入 x
  • appendleft(x) 在隊(duì)列頭部插入 x
  • pop() 在隊(duì)列尾部刪除一個(gè)元素,并返回
  • popleft() 在隊(duì)列頭部刪除一個(gè)元素,并返回
  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

這個(gè)庫(kù)提供了命名的元組,可以通過(guò)指定的名稱來(lái)訪問(wèn),例如:

  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ù)把第一個(gè)參數(shù)作為新元組的名稱,第二個(gè)參數(shù)就是元組內(nèi)元素的名稱映射,可以是一個(gè)字符串列表,也可以是空格或逗號(hào)分割的字符串。

  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 來(lái)設(shè)置默認(rèn)值:

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

如果你定義了三個(gè)名稱,卻提供了兩個(gè)默認(rèn)值,那么只有最后兩個(gè)會(huì)被賦予默認(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

計(jì)數(shù)器 Counter 非常有用,尤其當(dāng)你需要統(tǒng)計(jì)列表或可迭代對(duì)象中元素的數(shù)量時(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)計(jì)頻率前幾大,比如統(tǒng)計(jì)出現(xiàn)頻率最高的兩個(gè)元素:

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

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

  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 是簡(jiǎn)單和快捷的。

 

責(zé)任編輯:武曉燕 來(lái)源: Python七號(hào)
相關(guān)推薦

2012-04-28 14:21:47

Java數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu)

2019-04-14 22:22:28

Python數(shù)據(jù)結(jié)構(gòu)算法

2023-04-27 09:13:20

排序算法數(shù)據(jù)結(jié)構(gòu)

2024-03-26 00:05:13

數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)

2025-04-07 08:21:49

2014-07-01 15:49:33

數(shù)據(jù)結(jié)構(gòu)

2020-08-02 23:13:29

python開(kāi)發(fā)數(shù)據(jù)結(jié)構(gòu)

2020-08-02 23:04:20

python開(kāi)發(fā)代碼

2021-01-06 08:03:00

JavaScript數(shù)據(jù)結(jié)構(gòu)

2011-07-04 10:32:37

JAVA

2019-10-29 08:59:16

Redis底層數(shù)據(jù)

2024-08-20 00:00:05

2010-01-27 15:58:35

C++數(shù)據(jù)結(jié)構(gòu)

2019-09-18 08:31:47

數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

2021-01-28 07:33:34

JavaScript鏈表數(shù)據(jù)

2011-03-31 15:41:51

Cacti數(shù)據(jù)表結(jié)構(gòu)

2023-10-31 08:51:25

數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)

2024-10-11 16:43:05

高并發(fā)數(shù)據(jù)結(jié)構(gòu)技巧

2023-07-03 17:24:33

數(shù)據(jù)結(jié)構(gòu)

2014-12-10 10:35:43

微信 數(shù)據(jù)結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)