成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

標準庫 Collections 中 4 個常用的數據結構

開發 前端
collections 庫是標準庫的一部分,里面有很多數據結構,在列表、字典、元組的基礎上做了很多修改和提升。

[[427289]]

collections 庫是標準庫的一部分,里面有很多數據結構,在列表、字典、元組的基礎上做了很多修改和提升。

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

1、deque

它實現了兩端都可以操作的隊列,相當于雙端隊列,與可以指定最多存儲多少個元素,與 Python 的基本數據類型列表很相似。

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

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

  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] 

因為這是一個雙端隊列,你可以在隊列的首位插入元素,也可以在首尾刪除元素,它們的時間復雜度都是 O(1):

  • append(x) 在隊列尾部插入 x
  • appendleft(x) 在隊列頭部插入 x
  • pop() 在隊列尾部刪除一個元素,并返回
  • popleft() 在隊列頭部刪除一個元素,并返回
  1. a = deque(maxlen = 10) 
  2. a.append(1) # a = [1] 
  3. a.append(2) # a = [1, 2] 在隊列尾部插入 2 
  4. a.appendleft(3)# a = [3, 1, 2] 在隊列頭部插入 3 
  5. x = a.pop() # a = [3, 1], x = 2 刪除隊列尾部元素 2 
  6. y = a.popleft() # a = [1], y = 3 刪除隊列頭部元素 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 函數把第一個參數作為新元組的名稱,第二個參數就是元組內元素的名稱映射,可以是一個字符串列表,也可以是空格或逗號分割的字符串。

  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 來設置默認值:

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

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

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

3、Counter

計數器 Counter 非常有用,尤其當你需要統計列表或可迭代對象中元素的數量時:

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

還可以方便的統計頻率前幾大,比如統計出現頻率最高的兩個元素:

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

還可以動態增刪字符串,然后統計:

  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 的默認數據類型,比如:

  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 是簡單和快捷的。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2012-04-28 14:21:47

Java數據結構線性結構

2019-04-14 22:22:28

Python數據結構算法

2023-04-27 09:13:20

排序算法數據結構

2024-03-26 00:05:13

數據庫數據結構

2025-04-07 08:21:49

2014-07-01 15:49:33

數據結構

2011-07-04 10:32:37

JAVA

2021-01-06 08:03:00

JavaScript數據結構

2019-10-29 08:59:16

Redis底層數據

2020-08-02 23:04:20

python開發代碼

2020-08-02 23:13:29

python開發數據結構

2024-08-20 00:00:05

2010-01-27 15:58:35

C++數據結構

2021-01-28 07:33:34

JavaScript鏈表數據

2019-09-18 08:31:47

數據結構設計

2023-10-31 08:51:25

數據結構存儲數據

2011-03-31 15:41:51

Cacti數據表結構

2023-07-03 17:24:33

數據結構

2014-12-10 10:35:43

微信 數據結構

2024-10-11 16:43:05

高并發數據結構技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品视频在线播放 | 国产高清一区二区三区 | 欧美精品一区二区免费 | 欧美2区| 日韩一区二区三区精品 | 一区二区三区视频播放 | 久久精品在线免费视频 | 一区二区三区成人 | 黄色一级片aaa | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 欧美亚洲国产日韩 | 亚洲成人久久久 | 99久久精品国产一区二区三区 | 国产精品人人做人人爽 | 欧美福利影院 | 欧美一级大黄 | 日韩精品一区二区三区视频播放 | 凹凸日日摸日日碰夜夜 | 91高清在线观看 | 拍真实国产伦偷精品 | 亚洲va欧美va天堂v国产综合 | 一区二区免费看 | 91国产精品 | 久久久久久久久久久久久9999 | 亚洲精品久久久久久久久久久 | 久久黄视频 | 日韩在线播放一区 | 全免费a级毛片免费看视频免费下 | 亚洲啊v在线 | 日韩中文在线视频 | 国产精品久久久久久久久久 | 91在线观看 | 99re99| 日韩精品一区二区在线 | 国产伦精品一区二区三区视频金莲 | 久久精品国产一区 | 亚洲午夜精品视频 | 精品三区 | 久久久久一区二区三区 | 九九精品影院 | 中文字幕在线一区 |