Python学习——collections系列
一 ,计数器(counter)
Counter是对字典类型的补充,用于追踪值得出现次数 ps:具备字典的所有功能 + 自己的功能
例:
>>> from collections import Counter
>>> c = Counter('aadsassdsdads')
>>> print(c)
Counter({'a':4,'d':4,'s':5})
基本操作方法:
>>> c = Counter('abcdeabcdabcaba')
1.most_common(N)数量从大到小排列,获取前N个元素
>>> c.most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
2.sorted()列出所有不同的元素并排序
>>> sorted(c)
>>> ['a','b','c','d','e']
3.转换成字符串
>>> ''.join(sorted(c.elements()))
'aaaaabbbbcccdde'
4.取得元素重复次数的值
>>> c['a']
5
5.更新并添加元素重复次数
>>> for elem in 'shazam':
c[elem] += 1 #每个元素的次数加1
>>> c['a']
7
>>> print(c)
Counter({'a':7,'b':4,'c':3,'d':2,'s':1,'h':1,'z':1,'m':1,'e':1})
6.update()更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一
>>> d = Counter('simsalabim')
>>> c.update(d)
>>> c['a']
9
>>> print(c)
Countr({'a':9,'b':5,'s':3,'c':3,'m':3,'i':2,'d':2,'h':1,'l':1,'z':1,'e':1})
7.清空字典
>>> c.clear()
>>> c
Counter()
8.elements()取得计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器
>>> c = Counter('abcabc')
>>> sorted(c.elements())
['a','a','b','b','c','c']
9.subtract()相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量
>>> c = Counter('which')
>>> print(c)
Counter({'h':2,'c':1,'w':'1','i':1})
>>> c.subtract('watch')
>>> c['h']
1
>>> c['w']
0
>>> print(c)
Counter({'h':1,'i':1,'w':0,'c':0,'t':-1,'a':-1})
二, 有序字典(orderedDict)
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序
>>> from collections import OrderedDict
>>> dic = OrderedDict()
>>> dic['k1'] = 'v1'
>>> dic['k2'] = 'v2'
>>> dic['k3'] = 'v3'
>>> print(dic)
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
基本操作方法:
1.取得字典所有的键
>>> dic.keys()
2.取得字典所有值
>>> dic.values()
3.items() 方法以列表返回可遍历的(键, 值) 元组数组
>>> dic.items()
odict_items([('k1','v1'),('k2','v2'),('k3','v3')])
4.pop()方法,删除指定的键值
>>> dic.pop('k1')
'v1'
>>> print(dic)
OrderedDict([('k2','v2'),('k3','v3')])
5.popitem()方法,默认删除字典最后一个元素
>>> dic.popitem()
('k3','v3')
>>> print(dic)
odict_items([('k1','v1'),('k2','v2')])
6.move_to_end('k')方法将指定键值一道最后
>>> dic.move_to_end('k1')
>>> print(dic)
OrderedDict([('k2', 'v2'), ('k3', 'v3'),('k1', 'v1')])
7.update()更新字典
>>> dic.update({'k1':'v1111','k10':'v10'})
>>> print(dic)
OrderedDict([('k1', 'v1111'), ('k2', 'v2'), ('k3', 'v3'),('k10','v10')])
三 , 默认字典(defaultdict)
defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
例:
集合 [11,22,33,44,55,66,77,88,99...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
原生字典解决方法:
1 values = [11, 22, 33,44,55,66,77,88,99]
2 my_dict = {}
3 for value in values:
4 if value>66:
5 if my_dict.has_key('k1'):
6 my_dict['k1'].append(value)
7 else:
8 my_dict['k1'] = [value]
9 else:
10 if my_dict.has_key('k2'):
11 my_dict['k2'].append(value)
12 else:
13 my_dict['k2'] = [value]
默认字典解决方法:
1 from collections import defaultdict
2 values = [11, 22, 33,44,55,66,77,88,99]
3 my_dict = defaultdict(list) #默认将字典设置成列表类型
4 for value in values:
5 if value>66:
6 my_dict['k1'].append(value)
7 else:
8 my_dict['k2'].append(value)
四,可命名元组(namedtuple)
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。
from collections import namedtuple #创建(给元组命名)
>>> Mytuple = namedtuple('Mytuple',['x','y','z'])
>>> obj = Mytuple(11,22,33) #通过x,y,z取得元组的值
>>> obj.x 11
>>> obj.y 22
>>> obj.z 33
五,双向队列(deque)
一个线程安全的双向队列
from collections import deque #创建双向队列
>>> d = deque()
>>> d.append('1')
>>> d.append('2')
1.append()向队列中插入数据(从右边插入)
>>> d.append('3')
>>> print(d)
deque(['1','2','3'])
2.appendleft()向队列中插入数据(从左边插入)
>>> d.appendleft('4')
>>> print(d)
deque(['4','1','2','3'])
3.clear()清空队列
>>> d.clear()
>>> print(d)
deque([])
4.count()计数
>>> d.append('1')
>>> print(d)
deque(['1','2','1'])
>>> d.count('1')
2
5.extend()从右边向队列添加额外元素
>>> d.extend(['qq','ww','ee'])
>>> print(d)
deque(['1','2','qq','ww','ee'])
6.extendleft()从左边向队列添加元素
>>> d.extendleft(['qq','ww','ee'])
>>> print(d)
deque(['qq','ww','ee','1','2'])
7.index()取得元素下标
>>> d.index('1')
0
8.insert()指定位置插入元素
>>> d.insert(1,'nn')
>>> print(d)
deque(['1','nn','2'])
9.pop()从右边移除一个元素
>>> d.pop()
2
>>> print(d)
deque(['1','nn'])
10.popleft()从左边移除一个元素
>>> d.popleft()
1
>>> print(d)
deque(['nn'])
11.remove()移除指定元素
>>> d.remove('1')
>>> print(d)
deque(['2'])
12.reverse()反转队列
>>> print(d)
deque(['1','2'])
>>> d.reverse()
>>> print(d)
deque(['2','1'])
13.rotate()将右边指定的元素个数移到队列左边
>>> d.append('4')
>>> d.append('5')
>>> d.append('6')
>>> print(d)
deque(['1','2','3','4','5','6'])
>>> d.rotate(3)
>>> print(d)
deque(['4','5','6','1','2','3'])
六,单向队列(先进先出 FIFO )
import queue # 创建单向队列
>>> q = queue.Queue()
1.添加元素
>>> q.put('11')
>>> q.put('22')
2.qsize()获取队列中元素个数
>>> q.qsize()
2
3.get()取得元素(先进先出)
>>> q.get()
11
>>> q.get()
22
- 腾讯云Fintech云端系列论坛首站北京,揭秘如何全链路赋能互联网金融
- Flask入门笔记(一)
- 刷脸还是指纹识别,that's a question
- c#:使用using关键字自动释放资源未必一定就会有明显好处
- MongoDB 学习笔记(原创)
- Silverlight:ScorllViewer随Tab键自动跟随子控件的Focus滚动
- 老域名做新站如何能快速得上首页?
- Silverlight:分包下载及SEO优化方案
- jQuery调用RESTful WCF示例(GET方法/POST方法)
- "RDLC"报表-参数传递及主从报表
- 初探小程序之运营及未来方向
- 微信小程序深夜开放NFC等连接能力,未来可直接刷公交?
- Silverlight:获取ContentTemplate中的命名控件
- silverlight向wcf传递大于8192字节(8k)的字符串
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Spring IoC容器:选BeanFactory还是ApplicationContext?
- Stream使用这么久,它是如何提高遍历集合效率?
- FastDFS 分布式文件系统入门
- 「翻译」 如何Bypass rbash
- 代码审计-.NET下的序列化与反序列化(BinaryFormatter)
- 深入探讨 JavaScript 逻辑赋值运算符
- Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?
- 谈谈volatile
- 【V-REP自学笔记(八)】控制youBot抓取和移动物体
- Gson 简单使用姿势小结
- 【SpringBoot WebFlux 系列】WebFlux 之 Path 参数解析与 url 映射
- 「推荐」阿里开源的分布式事务框架 Seata
- BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?
- 【SpringBoot WebFlux 系列】 header 参数解析
- MySQL为什么还有kill不掉的语句?