Python_Day_05 計數器(counter),有序字典(OrderDict),預設字典(defaultdict),可命名元祖(namedtuple),雙向隊列(deque),單項隊列(deuqe.Queue)

来源:http://www.cnblogs.com/wang-com/archive/2016/09/17/5869457.html
-Advertisement-
Play Games

Counter(計數器) 是一個字典的子類,存儲形式同樣為字典,其中存儲的鍵為字典的元素,值為元素出現的次數,在使用之前我們需要先導入文件 import collections 初始化一個計數器 most_common(self,n) 取出元素最多的前n項 sorted(c) 給計數器排序 ''.j ...


  Counter(計數器)

是一個字典的子類,存儲形式同樣為字典,其中存儲的鍵為字典的元素,值為元素出現的次數,在使用之前我們需要先導入文件 import collections 

  • 初始化一個計數器
import  collections

# 初始化一個計數器
c = collections.Counter('sldfjoaoaufdlfuaof')
print(c) # Counter({'f': 4, 'o': 3, 'a': 3, 'd': 2, 'u': 2, 'l': 2, 'j': 1, 's': 1})
  •  most_common(self,n) 取出元素最多的前n項
import  collections

# most_common(self,n) 取出計數器總元素最多的前n項
c = collections.Counter('sldfjoaoaufdlfuaof')
d = c.most_common(3)
print(d) # [('f', 4), ('a', 3), ('o', 3)]
  •  sorted(c) 給計數器排序
import  collections

# sorted(c) 給計數器排序
c = collections.Counter('sldfjoaoaufdlfuaof')
print(sorted(c)) # ['a', 'd', 'f', 'j', 'l', 'o', 's', 'u']
  •  ''.join(sorted(c.elements())) 排序,列印成字元串形式
  •  elements(c) 計數器所有元素
import  collections

# ''.join(sorted(c.elements())) 相當於排序,列印成字元串
# c.elements() 返回所有元素
c = collections.Counter('sldfjoaoaufdlfuaof')
e = ''.join(c)
print(e) # ldfjosau
f = ''.join(sorted(c.elements()))
print(f) # aaaddffffjllooosuu
  •  sum(*args, **kwargs) 增加
  •  sum(c.values()) c字典所有元素個數
import  collections
# sum(c.values()) 所有值個數
c = collections.Counter('sldfjoaoaufdlfuaof')
g = sum(c.values())
print(g) # 18
  •  c['a'] c字典中a元素出現次數
import  collections

# c['a'] 字元a出現的次數
c = collections.Counter('sldfjoaoaufdlfuaof')
r = c['a']
print(r) # 3

for elem in 'shazam':
  c[elem] += 1
d = c['a']
print(d) # 5
del c['a']
print(c) # Counter({'f': 4, 'o': 3, 'l': 2, 'u': 2, 's': 2, 'd': 2, 'z': 1, 'm': 1, 'h': 1, 'j': 1})
  •  update(*args, **kwds) 更新計數器
import  collections
# update 更新計數器 c = collections.Counter('sldfjoaoaufdlfuaof') d = collections.Counter('aaaaasimsalabim') c.update(d) print(c['a']) # 10
  •  clear(self) 清除所有參數
import  collections

# clear()
c = collections.Counter('sldfjoaoaufdlfuaof')
c.clear()
print(c) # Counter()
  •  subtract(*args, **kwds) 刪除與另一個交集後的子集
import  collections

# subtract(*args, **kwds):刪除與另一個計數器的交集
c = collections.Counter('which')
c.subtract('witch')
print(c) # Counter({'h': 1, 'w': 0, 'c': 0, 'i': 0, 't': -1})

   

  OrderDict(有序字典)

  OrderedDict 有序字典,是對字典的補充,他能記錄字典的添加順序,相當於字典和列表的組合,使用之前需要導入依賴類 import collections 

  • 初始化一個有序字典
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
  •  fromkeys(cls, S, v=None) s:定義一個鍵列表,用於字典的鍵準備準備的值的列表, v:表示將鍵設置的值 預設是None
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# fromkeys(cls, S, v=None) s:定義一個鍵列表,用於字典的鍵準備準備的值的列表, v:表示將鍵設置的值 預設是None
s = ['v1','k2','43']
order1 = order.fromkeys(s,'Hello')
print(order1) # OrderedDict([('k1', 'Hello'), ('k2', 'Hello'), ('k3', 'Hello')])
  •  items(self, *args, **kwargs) 所有的元素
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# items(self, *args, **kwargs) 所有的元素
order2 = order.items()
print(order2) # odict_items([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]
  •  keys(self, *args, **kwargs)  所有的key
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# keys(self, *args, **kwargs) 所有的key
order3 = order.keys()
print(order3) # odict_keys(['k1', 'k2', 'k3'])
  •  move_to_end(self, *args, **kwargs) 將指定元素移動到最後,如果指定元素不存在就會報錯
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# move_to_end(self, *args, **kwargs) 將指定元素移動到最後,如果指定元素不存在就會報錯
order.move_to_end('k1')
print(order) # OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k1', 'v1')])
  •   pop(self, k, d=None)  彈出指定元素,同時可以接受彈出元素的值
import collections

# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# pop(self, k, d=None) 彈出指定元素,同時可以接受彈出元素的值
order4 = order.pop('k2')
print(order4) # v2
print(order) # OrderedDict([('k3', 'v3'), ('k1', 'v1')])
  •   popitem(self)  彈出字典中鍵值對,可以定義一個變數用來接收彈出的建制度,貌似彈出的建制度不是按照順序彈出來的
# 初始化一個有序字典
order = collections.OrderedDict()
print(order) # OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
print(order) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# popitem(self) 彈出字典中鍵值對,可以定義一個變數用來接收彈出的建制度,貌似彈出的建制度不是按照順序彈出來的
order5 = order.popitem()
print(order) # OrderedDict([('k3', 'v3')])
print(order5) # ('k1', 'v1')
  •  setdefault(self, k, d=None)  用來查找字典中鍵,如果字典中不存在key就預設為d
import collections
order_default = collections.OrderedDict()
order_default['k100'] = '034'
order_default.setdefault('k1',['hello','Python'])
print(order_default['k1']) # ['hello', 'Python']
print(order_default['k100']) # 034
  •  update(self, *args, **kwargs)  更新
import collections
order = collections.OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
order_default.update(order)
print(order_default) # OrderedDict([('k100', '034'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
  •  values(self, *args, **kwargs)  所有的值
import collections

order = collections.OrderedDict()
order['k1'] = 'v1'
order['k2'] = 'v2'
order['k3'] = 'v3'
order_default.update(order)
print(order_default) # OrderedDict([('k100', '034'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# values(self, *args, **kwargs) 所有的值
print(order_default.values()) # odict_values(['034', 'v1', 'v2', 'v3'])

 

  • defalultdict(預設字典) 
# 預設字典  defaultdict 表示其值預設為一個類型
my_defaulf = collections.defaultdict(list)
my_defaulf['k1'].append('v1')
print(my_defaulf) # defaultdict(<class 'list'>, {'k1': ['v1']})

 

  • namedtuple(可命名元祖) 
# 可命名元祖 ,可命名元祖是屬於collections類
Mytuple = collections.namedtuple('Mytuple',['name', 'age', 'email'])
f =  Mytuple('wang','12','[email protected]')
print(f.name) # wang
print(f.age) # 12
print(f.email) # [email protected]

 

  • deque(雙向隊列)

  雙向隊列,相當於一個列表,可以從隊列的兩端來操作,同樣在使用之前我們需要先導入  import collections 

  • 初始化     
init_deque = collections.deque()
print(init_deque) # deque([])
  •  append(self, *args, **kwargs) 添加元素
import collections

init_deque = collections.deque()
print(init_deque) # deque([])

# append(self, *args, **kwargs) 添加元素
init_deque.append('sdfasd')
print(init_deque) # deque(['sdfasd']) 一次只能添加一個元素
init_deque.append(1)
init_deque.append(2)
init_deque.append(3)
print(init_deque) # deque(['sdfasd', 1, 2, 3]) 預設是向後添加元素
  •  appendleft(self, *args, **kwargs) 想左添加元素
init_deque.appendleft(4)
print(init_deque) # deque([4, 'sdfasd', 1, 2, 3])
  •  clear(self, *args, **kwargs) 清除
  •  copy(self, *args, **kwargs) 拷貝
  •  count(self, value) 計算指定值(value)的個數
init_count = init_deque.count(4)
print(init_deque) # deque([4, 'sdfasd', 1, 2, 3])
print(init_count) # 1
  •  extend(self, *args, **kwargs) 在右邊擴展,同時會將傳入的參數拆分成元素來添加
init_deque.extend('100')
print(init_deque) # deque([4, 'sdfasd', 1, 2, 3, '1', '0', '0'])
  •  extendleft(self, *args, **kwargs) 會將傳入的參數拆分成元素來添加到左邊,完全倒序,最右邊的元素添加到最左邊
init_deque.extendleft('789')
print(init_deque) # deque(['9', '8', '7', 4, 'sdfasd', 1, 2, 3, '1', '0', '0'])
  •  index(self, value, start=None, stop=None) 指定值在指定範圍內的下標 預設是整個隊列
init_index = init_deque.index(1)
print(init_index) # 5
  •  insert(self, index, p_object)  在指定下標插入指定元素
init_deque.insert(5,'567')
print(init_deque) # deque(['9', '8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0', '0'])
  •  pop(self, *args, **kwargs)  從右邊彈出一個元素 同時可以接收彈出的元素
print(init_deque) # deque(['9', '8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0', '0'])
init_pop = init_deque.pop()
print(init_deque) # deque(['9', '8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0'])
print(init_pop) # 0
  •  popleft(self, *args, **kwargs)  彈出最左邊的元素
print(init_deque) # deque(['9', '8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0'])
init_popleft = init_deque.popleft()
print(init_deque) # deque(['8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0'])
print(init_popleft) # 9
  •  remove(self, value)  移除在隊列中出現的第一個指定的值
print(init_deque) # deque(['8', '7', 4, 'sdfasd', '567', 1, 2, 3, '1', '0'])
init_deque.remove(1)
print(init_deque) # deque(['8', '7', 4, 'sdfasd', '567', 2, 3, '1', '0'])
  •  reverse(self)  隊列反向排序
print(init_deque) # deque(['8', '7', 4, 'sdfasd', '567', 2, 3, '1', '0'])
init_deque.reverse()
print(init_deque) # deque(['0', '1', 3, 2, '567', 'sdfasd', 4, '7', '8'])
  •  rotate(self, *args, **kwargs)  將指定元素向前移動n個位置,如果n沒有設置就預設移動到左邊一個位置,但是n怎麼設置還沒搞定
print(init_deque) # deque(['0', '1', 3, 2, '567', 'sdfasd', 4, '7', '8'])
init_deque.rotate('567')
print(init_deque) # deque(['0', '1', 3, 2, '567', 'sdfasd', 4, '7', '8'])

 

  • Queue(單項隊列)

  單項隊列,只能在一個方向上操作,先進先出策略,使用時導入 import queue 

  • 初始化
import queue

# 單項隊列,只能在一個方向上操作,先進先出原則
init_queue = queue.Queue()
print(init_queue) # <queue.Queue object at 0x101379128> 怎麼好像是記憶體地址呢
  •  put(self, item, block=True, timeout=None) 向隊列添加元素
init_queue.put('a')
print(init_queue) # <queue.Queue object at 0x101b79748>
init_queue.put('b')
init_queue.put('c')
  •  qsize(self)  隊列總元素個數
# qsize(self) 隊列總元素個數
print(init_queue.qsize()) # 3
  •  empty(self)  如果返回時Ture 說明是空,其他情況是False,不確定一定有元素
# empty(self) 如果返回時Ture 說明是空,其他情況是False,不確定一定有元素
init_empty = init_queue.empty()
print(init_empty) # False
  •  get(self, block=True, timeout=None)  往外拿元素,相當於remove
# get(self, block=True, timeout=None) 往外拿元素,相當於remove
init_geta = init_queue.get()
print(init_geta) # a
print(init_queue.qsize()) # 2
  •  init_queue_max = queue.Queue(maxsize=3)  最多存放元素個數為3個,多餘的put進去的都會處於等待狀態

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不常用庫僅作收藏 圖像操作庫 Magick.NET C#的ListView增強組件 ObjectListView Software Protector 是易用的許可證系統 GUI 強大的 C# 組件庫 IKendeLib ...
  • @HtmlHrlper方式創建的標簽,會自動生成一些屬性,其中一些屬性就是關於驗證 如圖示例: 模型註解 通過模型註解後,MVC的驗證,包括前臺客戶端,後臺伺服器的驗證,MVC統統都做了包含,即使用戶在客戶端禁用Javascript,伺服器也會將非法操作進行驗證,當前前提是針對Model實體標識了註 ...
  • 好久沒有寫過Blog, 每天看著開源的Java社區流口水, 心裡滿不是滋味. 終於等到了今年六月份 dotnet core 的正式發佈, 看著dotnet 社區也一步一步走向繁榮, 一片蒸蒸日上的大好景象. 不在綁定Windows, 相信眾位dotneter的春天就要來了 廢話不多說, 早就對dot ...
  • 本配置節相對簡單而且常用 mode的值有如下三種 值 說明 On 指定啟用自定義錯誤。如果未指定 defaultRedirect,用戶將看到一般性錯誤。 Off 指定禁用自定義錯誤。這允許顯示標準的詳細錯誤。 RemoteOnly 指定僅向遠程客戶端顯示自定義錯誤並且向本地主機顯示 ASP.NET ...
  • 為了強調REST的通用性,客戶端不用WCF的形式調用服務,而是採用HttpWebResponse通過編程方式直接訪問,消息格式我們選XML。 ...
  • 本文版權歸博客園和作者吳雙共同所有,歡迎轉載,轉載和爬蟲請註明博客園蝸牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html。 最近打算分享一系列.NET Core實用後臺架構,所以首先介紹EF Core。目前國內各大論壇,各位大牛的分享,是按照Micros ...
  • 1.python中有一些基本規則的特殊字元。 (1)#表示這後的字元為python註釋。 (2)\n標準的行分隔符。 (3)\繼續上一行。(也就是過長的語句可以使用反斜杠(\)分解成幾行) (4);將兩個語句連接在一行。 (5):將代碼的頭和體分開。(多個語句構成一個代碼塊(代碼組),像if,whi ...
  • 如:/application/uctenter/controller 如:/application/uctenter/controller/User.php class User{ //屬性 public userName; //駝峰命名首字母小寫 //私有屬性 private _userAge;  ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...