自學Python6.5-內置模塊(re、collections )

自學Python之路-Python基礎+模塊+面向對象
自學Python之路-Python網絡編程
自學Python之路-Python併發編程+數據庫+前端
自學Python之路-django
html

自學Python6.5-內置模塊(re、collections、)

13. re模塊

正則表達式自己是一種小型的、高度專業化的編程語言,而在python中,經過內嵌集成re模塊,程序員們能夠直接調用來實現正則匹配。正則表達式模式被編譯成一系列的字節碼,而後由用C編寫的匹配引擎執行。前端

 

14. collections 模塊

在內置數據類型(dict、list、set、touple)基礎上,collections模塊還提供了幾我的外的數據類型:python

  • 計數器(Counter),主要用來計數
  • 雙向隊列(deque),雙端隊列,能夠快速的從另一側追加和推出對象
  • 默認字典(defaultdict),帶默認值的字典
  • 有序字典(OrderedDict)
  • 可命名元組(namedtuple) ,生成可使用名字來訪問元素內容的tuple

14.1 計數器(Counter)程序員

Counter做爲字典dicit()的一個子類用來進行hashtable計數,將元素進行數量統計,計數後返回一個字典,鍵值爲元素,值爲元素個數正則表達式

most_common(int) 按照元素出現的次數進行從高到低的排序,返回前int個元素的字典
elements 返回通過計算器Counter後的元素,返回的是一個迭代器
update 和set集合的update同樣,對集合進行並集更新
substract 和update相似,只是update是作加法,substract作減法,從另外一個集合中減去本集合的元素
iteritems 返回由Counter生成的字典的全部item
iterkeys 返回由Counter生成的字典的全部key
itervalues 返回由Counter生成的字典的全部value
from collections import Counter

str = "abcbcaccbbad"
li = ["a","b","c","a","b","b"]
d = {"1":3, "3":2, "17":2}

#1. Counter獲取各元素的個數,返回字典
print ("Counter(s):", Counter(str))
print ("Counter(li):", Counter(li))
print ("Counter(d):", Counter(d))

#2. most_common(int)按照元素出現的次數進行從高到低的排序,返回前int個元素的字典
d1 = Counter(str)
print ("d1.most_common(2):",d1.most_common(2))

#3. elements返回通過計算器Counter後的元素,返回的是一個迭代器
print ("sorted(d1.elements()):", sorted(d1.elements()))
print ('''("".join(d1.elements())):''',"".join(d1.elements()))

#4. 如果字典的話返回value個key
d2 = Counter(d)
print("如果字典的話返回value個key:", sorted(d2.elements()))

14.2 雙向隊列(deque)數據庫

使用list存儲數據時,按索引訪問元素很快,可是插入和刪除元素就很慢了,由於list是線性存儲(有順序的),數據量大的時候,插入和刪除效率很低。django

duque就是爲了高效實現插入和刪除操做的雙向列表,適用於隊列和棧。 編程

  • 堆棧:先進後出
  • 隊列queue:先進先出
#隊列
import queue
q = queue.Queue()
q.put([1,2,3])
q.put(5)
q.put(6)
print(q)  #
print(q.get())
print(q.get())
print(q.get())
print(q.get())   # 取完3個數以後,阻塞
print(q.qsize()) # 取q的數值

# 隊列
from collections import deque
dq = deque([1,2])
dq.append('a')   # 從後面放數據  [1,2,'a']
dq.appendleft('b') # 從前面放數據 ['b',1,2,'a']
dq.insert(2,3)    #['b',1,3,2,'a']
print(dq.pop())      # 從後面取數據 a
print(dq.pop())      # 從後面取數據 2
print(dq.popleft())  # 從前面取數據 b
print(dq)
append 隊列右邊添加元素
appendleft 隊列左邊添加元素
clear 清空隊列中的全部元素
count 返回隊列中包含value的個數
extend 隊列右邊擴展,能夠是列表、元組或字典,若是是字典則將字典的key加入到deque
extendleft 同extend,在左邊擴展
pop 移除並返回隊列右邊的元素
popleft 移除並返回隊列左邊的元素
remove(value) 移除隊列第一個出現的元素
reverse 隊列的全部元素進行反轉
rotate(n) 對隊列數進行移動

 

14.3 默認字典(defaultdict)
網絡

 

默認字典,字典的一個子類,繼承全部字典的方法,默認字典在進行定義初始化的時候得指定字典值有默認類型。併發

 

from collections import defaultdict
d = defaultdict(lambda : 5)
print(d['k'])

14.4 有序字典(OrderedDict)

使用dict時,key是無序的,在對dict作迭代的時候,咱們沒法肯定key的順序。

若是要保持key的順序,就能夠採用orderedDict。

from collections import  OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)  # OrderedDict的Key是有序的
print(od['a'])
for k in od:
  print(k)

14.5 可命名元組(namedtuple) 

咱們知道tuple是不可變集合,例如,一個點的二維座標能夠表示成p=(1,2),可是這樣很難看出是一個點的座標,全部這時可採用namedtuple。

from collections import namedtuple
Point = namedtuple('point',['x','y','z'])
p1 = Point(1,2,3)
p2 = Point(3,2,1)
print(p1.x)
print(p1.y)
print(p1,p2)

#花色和數字
from collections import namedtuple
Card = namedtuple('card',['suits','number'])
c1 = Card('紅桃',2)
print(c1)
print(c1.number)
print(c1.suits)

15.  模塊

相關文章
相關標籤/搜索