标签:python
一、计数器(counter)
计数器(counter)以字典的形式返回序列中各个字符出现的次数,值为key,次数为value
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#导入collections模块
import collections
counter_test = collections.Counter("asfafjhadgkhjkgfjhgfjhaghdg")
print(counter_test)
#返回值
C:\Python27\python27.exe D:/cto3/day6/coun_1.py
Counter({‘g‘: 5, ‘h‘: 5, ‘a‘: 4, ‘f‘: 4, ‘j‘: 4, ‘d‘: 2, ‘k‘: 2, ‘s‘: 1})1、计数器的方法(字典方法略)
counter是dict的子类,所有它拥有字典的所有方法,还有一些自己的方法
#取前3位的返回值
ret1 = counter_test.most_common(3)
print(ret1)
##########
result:[(‘g‘, 5), (‘h‘, 5), (‘a‘, 4)]
#循环取计数器中的值
for k,v in counter_test.items():
print(k,v)
##########
result:
(‘a‘, 4)
(‘d‘, 2)
(‘g‘, 5)
(‘f‘, 4)
(‘h‘, 5)
(‘k‘, 2)
(‘j‘, 4)
(‘s‘, 1)
#update方法,subtract方法,更新与移除
obj = collections.Counter([11,22,33,22,])
print(obj)
obj.update([11,22,44])
print(obj)
obj.subtract([11,22,44])
print(obj)
##########
result:
Counter({22: 2, 33: 1, 11: 1})
Counter({22: 3, 11: 2, 33: 1, 44: 1})
Counter({22: 2, 33: 1, 11: 1, 44: 0})二、有序字典(orderedDict)
有序字典(orderedDict)是字典的子类,在字典的基础上记录了元素添加的顺序
#导入collections模块 import collections dic = collections.OrderedDict() dic[‘k1‘] = ‘v1‘ dic[‘k2‘] = ‘v2‘ dic[‘k3‘] = ‘v3‘ print(dic) ########## result: OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)])
1、有序字典的方法(字典的方法略)
#python3中新加入的方法,移动字典中的顺序
dic.move_to_end(‘k1‘)
print(dic)
##########
result:
OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k1‘, ‘v1‘)])
#按照顺序,后进先出弹出元素(有返回值)
dic.popitem()
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘)])
#指定弹出的元素(有返回值)
dic.pop(‘k2‘)
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘v1‘), (‘k3‘, ‘v3‘)])
#更新,update方法
dic.update({‘k1‘:‘new1‘,‘k4‘:‘v4‘})
print(dic)
##########
result:
OrderedDict([(‘k1‘, ‘new1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k4‘, ‘v4‘)])三、默认字典(defaultdict)
默认字典与字典的区别是可设置其元素的类型
#导入collections模块
import collections
my_dict = collections.defaultdict(list)
my_dict[‘k1‘].append(‘v1‘)
print(my_dict)
##########
result:
defaultdict(<class ‘list‘>, {‘k1‘: [‘v1‘]})示例:
# 练习:元素分类
# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],
# 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# 即: {‘k1‘: 大于66 , ‘k2‘: 小于66}
1、不用默认指点的写法要判断字典中是否已有{‘k1‘:[]}
all_list = [11,22,33,44,55,66,77,88,99,90,]
dic = {}
for i in all_list:
if i > 66:
if "k1" in dic.keys():
dic[‘k1‘].append(i)
else:
dic[‘k1‘] = [i,]
else:
if "k2" in dic.keys():
dic[‘k2‘].append(i)
else:
dic[‘k2‘] = [i,]
print(dic)
2、默认字典
all_list = [11,22,33,44,55,66,77,88,99,90,]
dic = collections.defaultdict(list)
for i in all_list:
if i > 66:
dic[‘k1‘].append(i)
else:
dic[‘k2‘].append(i)
print(dic)
##########
result:
defaultdict(<class ‘list‘>, {‘k2‘: [11, 22, 33, 44, 55, 66], ‘k1‘: [77, 88, 99, 90]})四、可命名元祖(namedtuple)
namedtuple与元组的区别是namedtuple创建了一个包含tuple和自己特定方法的类
#导入collections模块 import collections # 创建了一个可命名元组的类 MytupleClass = collections.namedtuple(‘MytupleClass‘,[‘x‘,‘y‘,‘z‘]) # 创建对象,obj对象的x=11,y=22,z=33 obj = MytupleClass(11,22,33) print(obj.x) print(obj.y) print(obj.z) ########## result: 11 22 33
五、队列
1、双向队列
#导入collections模块 import collections d = collections.deque(‘ghi‘) 常用方法: #右加入 >>> d.append(‘j‘) #左加入 >>> d.appendleft(‘f‘) >>> d deque([‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘]) #右移除(有返回值) >>> d.pop() ‘j‘ #左移除(有返回值) >>> d.popleft() ‘f‘ >>> d deque([‘g‘, ‘h‘, ‘i‘]) #队列可转换为列表 >>> list(d) [‘g‘, ‘h‘, ‘i‘] #右扩展 >>> d.extend(‘jkl‘) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #左扩展(倒序加入队列) >>> d.extendleft(‘abc‘) >>> d deque([‘c‘, ‘b‘, ‘a‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #右轮换 >>> d.rotate(1) >>> d deque([‘l‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘]) #左轮换 >>> d.rotate(-1) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #统计队列中元素出现的次数 >>> d.extend(‘ghijk‘) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘]) >>> d.count(‘g‘) 2 #清除 >>> d.clear()
2、单向队列(先进先出)
import queue #创建单向队列 q = queue.Queue() #插入第一条数据 q.put(‘123‘) #插入第二条数据 q.put(‘456‘) #查看队列中有几条数据 print(q.qsize()) #顺序取出第一条数据 print(q.get()) ########## result: 2 123
本文出自 “linux启航” 博客,请务必保留此出处http://jiayimeng.blog.51cto.com/10604001/1932093
Python 学习日记第五篇 -- collections系列
标签:python
原文地址:http://jiayimeng.blog.51cto.com/10604001/1932093