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迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...
随机推荐
- TCP与HTTP连接管理
一. HTTP事务时延原因(HTTP权威指南 P86) 1.客户端首先需要根据URI确定WEB服务器的IP和端口号, 那么DNS解析上花的时间会很多(大多数HTTP客户端会有一个小的DNS缓存) ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- springMVC之HttpServletRequest的getParameterMap()
request.getParameterMap()的返回类型是Map类型的对象,也就是符合key-value的对应关系,但这里要注意的是,value的类型是String[],而不是String. 得到 ...
- 「NOI2015」「Codevs4621」软件包管理器(树链剖分
4621 [NOI2015]软件包管理器 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对 ...
- AQS共享锁应用之Semaphore原理
我们调用Semaphore方法时,其实是在间接调用其内部类或AQS方法执行的.Semaphore类结构与ReetrantLock类相似,内部类Sync继承自AQS,然后其子类FairSync和NoFa ...
- Java原子属性更新器AtomicReferenceFieldUpdater的使用
AtomicReferenceFieldUpdater是基于反射的工具类,用来将指定类型的指定的volatile引用字段进行原子更新,对应的原子引用字段不能是private的.通常一个类volatil ...
- springboot中使用@Value读取配置文件
一.配置文件配置 直接配置 在src/main/resources下添加配置文件application.properties 例如修改端口号 #端口号 server.port=8089 分环境配置 在 ...
- vue-cli创建项目 一直downloading解决办法
vue-cli创建项目: 1 安装node(需要npm,npm是node的包管理股工具) 2 安装cnpm 3 安装vue-cli cnpm install vue-cli -g 4 创建 ...
- bzoj1941
KD-tree **了这道题 这个估价函数好鬼畜,把min打成max... 关于min的估价函数非常鬼畜,具体我也不知道为什么. #include<bits/stdc++.h> using ...
- final/finalize/finally的区别
一.性质不同 (1)final为关键字: (2)finalize()为方法:---垃圾回收机制中的方法(GC) (3)finally为为区块标志,用于try语句中: 二.作用 (1)final为用于标 ...