您好,登錄后才能下訂單哦!
本篇內容介紹了“Python的模塊collections怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1.創建升級版的元組--namedtupe
Python的元組(1,2,3)具有不可變性,但是單獨的元組在無法滿足現有需求時,可以使用升級版的元組,使用namedtupe可以很方便地定義一種數據類型,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "問道編程"
__date__ = "2019/03/18 12:37"
from collections import namedtuple
Point = namedtuple('Ponit', ['x', 'y']) # 實例化一個tupe對象,并規定了對象數量以及屬性:x、y
p = Point(1,3) # 賦值
print(p.x) # 通過屬性訪問數據
print(p.y)
2.創建升級版的列表--deque
使用list存儲數據時,可以非常方便的進行查詢和尾部操作(append、pop),但是在頭部添加、刪除時效率很低(最大時間復雜度為n),所以有了deque,可以實現高效的頭、尾的操作,適合用于隊列和棧:
from collections import deque
q = deque([1,2,3])
q.append(6) # [1,2,3,6] 同list一樣進行尾部添加、刪除操作
q.pop() # [1,2,3]
q.appendleft('x') # ['x',1,2,3] 頭部添加
q.popleft() # [1,2,3] 頭部刪除
3.創建升級版字典--defaultdict
常用的dict使用鍵值對存儲數據,但當使用key訪問匹配的值,而key不存在時會報錯,而使用defaultdict可以規定一個默認值,當使用不存在的key查詢字典的值時,會返回一個指定的默認值:
from collections import defaultdict
d = defaultdict(lambda: 'N/A') # 創建defaultdict對象,是字典類型的子集,并規矩默認值是 N/A
d['a'] = 1
print(d['a']) # 1 正常輸出
print(d['b']) # N/A key不存在時,輸出默認值
4.創建有順序的字典--OrderedDict
常用的dict是不記錄鍵值對順序的,使用OrderedDict可以創建相對有序的字典,該類型可記錄字典的輸入順序,但不能自動進行排序:
from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['b'] = 2
print(d.keys()) # ['a','b'] 會按照key值的錄入順序進行打印
5.創建多個字典的映射--ChainMap
官方解釋:一個 ChainMap 類是為了將多個映射快速的鏈接到一起,這樣它們就可以作為一個單元處理。它通常比創建一個新字典和多次調用 update() 要快很多。
通俗的說,是創建一將多個字典鏈接到一起的映射,底層通過list實現,查詢時,從第一個字典映射開始查,如果第一個字典沒有,查詢第二個,依次類推,但是更新、刪除數據時僅對于第一個字典映射操作。
通常在進行拼接命令行時,可以對參數進行優先選擇,比如用戶輸入數據、環境傳入、默認值。
參考:https://docs.python.org/zh-cn/3/library/collections.html
6.功能強大的列表計數功能--Counter
from collections import Counter
arr = [1,2,3,3,3,6,2,2,2] # 1出現1次,2出現4次,3出現3次,6出現1次
print(arr.count(3)) # 3 可以使用list的count方法獲取指定值的出現次數
cou = Counter(arr)
pirnt(cou) # Counter({3: 3, 2: 2, 1: 1, 5: 1, 6: 1}) 屬于字典的子集
for k,v in cou.items():
print(k,v) # 對Counter進行遍歷,打印結果
print(cou.most_common(2)) # [(3,3),(2,2)] 返回出現次數最高的前兩個數字及次數
“Python的模塊collections怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。