collection系列
不常用功能,需要進行模塊功能導入:
import collection
Counter
常用方法測試:
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import collections
obj = collections.Counter('sjndsjkdsdmslaladsldsldms')
print("輸出字符出現的次數字典:")
for k,v in obj.items():
print("{%s:%s}" % (k,v))
print("輸出每一個字符:") #遍歷獲取原始字符元素
for k in obj.elements():
print(k)
print("輸出前四個出現次數最多的字符:")
for k in obj.most_common(4):
print(k)
輸出結果:
輸出字符出現的次數字典:
{s:7}
{l:4}
{m:2}
{d:6}
{k:1}
{n:1}
{j:2}
{a:2}
輸出每一個字符:
s
s
s
s
s
s
s
l
l
l
l
m
m
d
d
d
d
d
d
k
n
j
j
a
a
輸出前四個出現次數最多的字符:
('s', 7)
('d', 6)
('l', 4)
('m', 2)
_missing_
功能:對於不存在的元素,返回計數器為0
import collections
c = collections.Counter('adjsdkskdjksjaksklklakl')
c.__missing__(5)
返回結果:0
most_common
功能:獲取出現次數的前幾個字母排名
import collections
c = collections.Counter('adjsdkskdjksjaksklklakl')
c.most_common(3)
[('k', 7), ('s', 4), ('a', 3)]
c.most_common(8)
[('k', 7), ('s', 4), ('a', 3), ('j', 3), ('l', 3), ('d', 3)]
elements
功能:計數器中的所有元素,並且按照ascii碼進行了排序
返回一個迭代器。元素被重復了多少次,在該迭代器中就包含多少個該元素。所有元素按照字母序排序,個數小於1的元素不被包含。
import collections
c = collections.Counter('adjsdkskdjksjaksklklakl')
sorted(c.elements())
返回結果:['a', 'a', 'a', 'd', 'd', 'd', 'j', 'j', 'j', 'k', 'k', 'k', 'k', 'k', 'k', 'k','l', 'l', 'l', 's', 's', 's', 's']
計數值的訪問與缺失的鍵
功能:默認將計數器中所有的字符認為一個鍵,然后統計鍵出現的次數,即鍵值。如果鍵不存在則返回0.
import collections
c = collections.Counter('adjsdkskdjksjaksklklakl')
>>> c['a']
3
>>> c['b']
0
>>> c['l']
3
update && subtract
功能:都是更新計數器,update是增加,subtract是減少
import collections
>>> c = collections.Counter('which')
>>> c['h'] #這里的h出現2次
2
>>> c.update('with')
>>> c
Counter({'h': 3, 'i': 2, 'w': 2, 't': 1, 'c': 1})
>>> c['h'] #這里則完成了update操作,h出現了3次
3
>>> c.subtract('with')
>>> c
Counter({'h': 2, 'c': 1, 'i': 1, 'w': 1, 't': 0})
>>> c['h'] #這里完成subtract操作之后,h出現的次數又恢復到2次
2
del
功能:刪除鍵
import collections
>>> c = collections.Counter('which')
>>> c['h'] #這里的h出現2次
2
>>> del c['h']
>>> c
Counter({'c': 1, 'i': 1, 'w': 1, 't': 0})
>>> c['h'] #del操作刪除了鍵'h'
0
copy
功能:淺拷貝
import collections
>>> c = collections.Counter('which')
>>> d = c.copy()
>>> d
Counter({'h': 2, 'c': 1, 'i': 1, 'w': 1})
>>> id(c)
7150792
>>> id(d)
6511976
算術和集合操作
功能:+、-、&、|操作也可以用於Counter。其中&和|操作分別返回兩個Counter對象各元素的最小值和最大值。需要注意的是,得到的Counter對象將刪除小於1的元素。
常用操作
說明:Counter繼承dict的所有方法,常用的操作列在下面,僅供參考
有序字典orderedDict
有序字典繼承字典的一切屬性,只是在順序上是有序的。
d = collections.OrderedDict({'name':'swht','age':18})
print(d)
返回結果:OrderedDict([('name', 'swht'), ('age', 18)])
print(type(d))
返回結果:<class 'collections.OrderedDict'>
move_to_end
功能:將指定的鍵值對從開頭移動到末尾。
d = collections.OrderedDict({'name':'swht','age':18,'address':'shandong',})
d.move_to_end('name')
print(d)
返回結果:OrderedDict([('age', 18), ('address', 'shandong'), ('name', 'swht')])
pop
功能:移除字典鍵值,並返回刪除鍵值的values
d = collections.OrderedDict({'name':'swht','age':18,'address':'shandong',})
d.pop('address')
print(d)
返回結果:OrderedDict([('age', 18), ('name', 'swht')])
clear
功能:清空有序字典的值
d = collections.OrderedDict({'name':'swht','age':18,'address':'shandong',})
d.clear()
print(d)
返回結果:OrderedDict()
keys,values,items
功能:繼承字典的屬性,獲取字典的所有鍵和所有值
d = collections.OrderedDict({'name':'swht','age':18,'address':'shandong',})
l1 = d.keys()
l2 = d.values()
l3 = d.items()
print(l1,l2,l3)
返回結果:odict_keys(['address', 'age', 'name']) odict_values(['shandong', 18, 'swht']) odict_items([('age', 18), ('name', 'swht'), ('address', 'shandong')])
默認字典defaultdict
defaultdict是對字典的類型的補充,他默認給字典的值設置了一個類型。創建一個默認字典,value值類型為列表.
dic = collections.defaultdict(list)
可命名元組nametuple
沒有現成的類,用戶需要自行創建相應的類
測試代碼
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import collections
MytupleClass = collections.namedtuple("MytupleClass",['x','y','z'])
obj = MytupleClass(11,22,33)
print(obj.x,obj.y,obj.z)
返回結果:11 22 33
總結:相當於在元組的基礎上增加一個key,使其成為一個類字典的樣子
隊列
雙向隊列
下面兩種方法都可以創建雙向列表,雖然在最初的引用的類不同,但最后創建的類型 都是collections.deque
#創建雙向隊列
import collections
d = collections.deque()
返回結果:<class 'collections.deque'>
#but這樣創建雙向隊列呢
import queue
p = queue.deque()
print(type(p))
#<class 'collections.deque'>
單向隊列
#創建單向隊列
import queue
q = queue.Queue()
print(type(q))
#<class 'queue.Queue'>