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迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...
随机推荐
- Git基本用法1
二.git的初始化 在使用git进行代码管理之前,我们首先要对git进行初始化. 1.Git 配置 使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录 ...
- 初学Java(一)
基本语法: 编写Java程序时,应注意以下几点: 1.大小写敏感:java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 2.类名:对于所有的类来说,类名的首字母应该大写.如果类名由 ...
- 17.for循环语句
for循环: 语法: for(表达式1;表达式2;表达式3){ java语句; } 表达式1是最初始化表达式:最先执行,只执行一次 表达式2必须是boolean 类型的表达式.结果为ture或者fal ...
- bzoj4521
数位dp 复习数位dp 数位dp一般用记忆化搜索来解决 观察需要满足的条件,然后计入状态 状态还要记录是否达到上线,以及前导零 比如说这道题 dfs(bit,a4,a8,cnt,last,limit) ...
- CS231n 2016 通关 第四章-反向传播与神经网络(第一部分)
在上次的分享中,介绍了模型建立与使用梯度下降法优化参数.梯度校验,以及一些超参数的经验. 本节课的主要内容: 1==链式法则 2==深度学习框架中链式法则 3==全连接神经网络 =========== ...
- python zlib字符串压缩
在做网络程序时,可以对字符串进行压缩来节省带宽 项目中用到 {"compress": <压缩标记>, "result":[[设备类型.设备ID, 设 ...
- 【216】◀▶ IDL 字符串操作说明 (黑底)
参考:String Processing Routines —— 字符串处理函数 参考:IDL_String Methods 01 STRING 返回字符串. 02 STRCMP 比较字符串, ...
- python 之生产者消费者模型
进程实现: import time,random from multiprocessing import Process,Queue def producer(name,q): count= 0 wh ...
- Identity Server 4 原理和实战(完结)_为 MVC 客户端刷新 Token
服务端修改token的过期使劲为60秒 过期了 仍然还能获取到api1的资源 api1,设置每隔一分钟就验证token 并且要求token必须要有超时时间这个参数, 1分钟后提示超时,两边都是一分钟, ...
- 在junit格式的结果信息中只包含错误信息的修改方法
文件名称:suiteJunit.vm 文件路径:src\fitnesse\resources\templates 添加如下黑体部分内容: <?xml version="1.0" ...