Python基础之collection
collection-系列
cellection是作为字典、元组(列表与元组可互相转换)的扩充,在此需要导入cellection
一、计数器(counter)
counter是对字典类型的补充,用户获取字典中元素出现的次数。它具备字典所有的功能以及自己自带的功能。
import collections
stra = collections.Counter('asdfasdfasdfdgghjertgfgsa')
print(stra)
输出的结果是:
Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1})
后面的数字表示的是出现的次数。
Counte
most_common,出现最多
import collections
stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
print(stra)
ret = stra.most_common(4)
print(ret)
测试结果:
Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1}) [('a', 4), ('d', 4), ('g', 4), ('f', 4)] 输出了排名前四的
most_common
elements元素:
import collections
stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
for items in stra.elements():
print(items)
执行结果:
Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1})
a
a
a
a
e
d
d
d
d
g
g
g
g
f
f
f
f
h
j
s
s
s
s
r
t
[
]
区别于:
import collections
stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
print (stra)
# for item in stra.elements():
# print(item)
for item in stra.items():
print(item)
执行结果:
Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1})
('a', 4)
('e', 1)
('d', 4)
('g', 4)
('f', 4)
('h', 1)
('j', 1)
('s', 4)
('r', 1)
('t', 1)
('[', 1)
(']', 1)
更新(增加删除)操作:
增加:
import collections
stra = collections.Counter(['aa','bb','cc'])
print(stra)
stra.update(['dd','aa','bb'])
print(stra)
结果:
Counter({'aa': 1, 'cc': 1, 'bb': 1})
Counter({'aa': 2, 'bb': 2, 'cc': 1, 'dd': 1}) 证明增加成功。
删除:
import collections
stra = collections.Counter(['aa','bb','cc'])
print(stra)
stra.update(['dd','aa','bb'])
print(stra)
stra.subtract(['dd','aa','bb'])
print(stra)
输出结果:
Counter({'aa': 1, 'cc': 1, 'bb': 1})
Counter({'aa': 2, 'bb': 2, 'cc': 1, 'dd': 1})
Counter({'aa': 1, 'cc': 1, 'bb': 1, 'dd': 0})证明已经删除了。
二、有序字典(orderedDict)
有序字典是对字典的补充:
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
dic['k4'] = 'v4'
dic['k5'] = 'v5'
print(dic)
结果输出:
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
值不会变而且是固定了,不像字典一样位置会是浮动变化的。 popitem用法:
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
dic['k4'] = 'v4'
dic['k5'] = 'v5'
print(dic)
c = dic.popitem()
print(dic)
print(c)
输出结果:
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')])
('k5', 'v5')取出了‘k5’,'v5'是最后进的,所以遵循后进先出。
pop用法:
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
dic['k4'] = 'v4'
dic['k5'] = 'v5'
print(dic)
# c = dic.popitem()
c = dic.pop('k2') ###指定取出k2
print(dic)
print(c)
输出结果:
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
OrderedDict([('k1', 'v1'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')]) pop表示是拿出删除据为己有。
v2 得到k2值 新增update:
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
dic['k4'] = 'v4'
dic['k5'] = 'v5'
print(dic)
dic.update({'k1':'','k5':'','k10':''})
print(dic)
输出结果:
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
OrderedDict([('k1', ''), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', ''), ('k10', '')])表示有k值更新k值。没有就新增。
三、默认字典(defaultdict)
defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
import collections
dic = collections.defaultdict(list) #定义默认字典类型为list。
dic['k1'].append('')
print(dic)
输出:
defaultdict(<type 'list'>, {'k1': ['']}) 如果不采用默认字典:
import collections
dic = {}
dic['k1'].append('')
print(dic)
会报错:
Traceback (most recent call last):
File "C:/Users/daisy/PycharmProjects/s12/day3/collection-ϵ��.py", line 54, in <module>
dic['k1'].append('')
KeyError: 'k1'
四、可命名元组(namedtuple)
import collections
#创建类。MyTupleClass
MyTupleClass = collections.namedtuple('MyTupleClass',['x','y','z'])
obj = MyTupleClass('xx','yy','zz')
print(obj.x)
print(obj.y)
print(obj.z)
测试:
xx
yy
zz
五、双向队列(deque)
que = collections.deque()
que.append('')
que.appendleft('')
que.append('')
que.extend(['xx','xxd','xxxd'])
que.extendleft(['','',''])
print(que)
print(que.rotate(2))
print(que.count(''))
print(que)
执行:
deque(['', '', '', '', '', '', 'xx', 'xxd', 'xxxd'])
None
1
deque(['xxd', 'xxxd', '', '', '', '', '', '', 'xx'])
六、单向队列(queue.queue)在queue
import Queue
q = Queue.Queue()
q.put("abc")
q.put("def")
print(q.qsize())
print(q.get())
运行结果: 2
abc 先进先出:abc先进所以输出abc。
Python基础之collection的更多相关文章
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python之路【第二篇】:Python基础
参考链接:老师 BLOG : http://www.cnblogs.com/wupeiqi/articles/4906230.html 入门拾遗 一.作用域 只要变量在内存中就能被调用!但是(函数的栈 ...
- Python基础教程【读书笔记】 - 2016/7/14
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第六波:第2章 列表和元组 [总览] 数据结构,是通过某种方式组织在一起的数据元素的集合,数据元素可以使数字或字符串 ...
- Python之路【第二篇】:Python基础(一)
一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1: name = 'wupeiqi' print name 下面的结论对吗? ...
- Python之路:Python 基础(二)
一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'lenliu' print name 下面的结论对吗?(对) 外层变量,可以被 ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- python基础——列表推导式
python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...
- python基础之列表、字典、元祖等 (二)
一.作用域 if 1==1: name = 'weibinf' print name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 result = 值1 ...
- Python基础面试题库
Python基础面试题库 Python是一门学习曲线较为容易的编程语言,随着人工智能时代的到来,Python迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...
随机推荐
- plsql导入csv数据,未响应,invalid identifier
问题分析: 1.确保cvs字段名与表字段名一致,不要有空格 2.cvs字段对应表字段的大写,确保表字段都是大写 3.如果字段能对应上,plsql会自动识别出来
- NOI2017退役记
Day1 全世界都200+我162,考场上fread和fwrite写挂了直接删了,然后就被卡了48也是没谁了. Day2 2-SAT写挂,就没有然后了. 明明退役前一直都在做自己最想做的事情,连这就是 ...
- MTK DDR调试
1. 获取 flash id: 硬件信息:通过这个节点可以知道当前flash的id,上层根据id找到对应的flash名字. cat /sys/block/mmcblk0/device/cid \ker ...
- mysql跨表更新示例
一.在同一个表中冗余存储记录之间的关系(组织机构树),查询时需要根据冗余字段进行关联查询 例如,下面的示例,用户表中有个字段friend标记其朋友关系,要求找出id=2及他的朋友(父节点) mysql ...
- 小程序rpx
rpx是微信小程序解决自适应屏幕尺寸的尺寸单位.微信小程序规定屏幕的宽度是750rpx, 微信小程序也支持rem尺寸单位,rem规定屏幕的宽度是20rem vw vh适配 vw和vh是css3中的新单 ...
- shell脚本 列出所有网卡的ip地址
#!/bin/bashfor i in `ifconfig | grep -o ^[a-z0-9]*`do ifconfig $i|sed -n 2p|awk '{ print $2 }'|tr -d ...
- AS3 滤镜相关
<ignore_js_op> package { import flash.display.Sprite; import flash.filters.BlurF ...
- Swift3.0 键盘高度监听获取
方法:通过通知监听键盘的动态 1.键盘的动态有四种: public static let UIKeyboardWillShow: NSNotification.Name public static l ...
- HDU4166【BFS】
题意: 给你一幅图,给你起点和终点,再给你机器人所面对的方向,机器人可以左转90°,右转90°,向前进一格,每种操作都是1秒,,求起点和终点最少花费下的路径条数,方案数: 思路: 这里有一个不同就是机 ...
- 洛谷P3321 [SDOI2015]序列统计(NTT)
传送门 题意:$a_i\in S$,求$\prod_{i=1}^na_i\equiv x\pmod{m}$的方案数 这题目太珂怕了……数学渣渣有点害怕……kelin大佬TQL 设$f[i][j]$表示 ...