Collections库使用
Date: 2019-05-27
Author: Sun
Collections库
Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
namedtuple(): 生成可以使用名字来访问元素内容的tuple子类deque: 双端队列,可以快速的从另外一侧追加和推出对象Counter: 计数器,主要用来计数OrderedDict: 有序字典defaultdict: 带有默认值的字典
1. namedtuple
namedtuple主要用来产生可以使用名称来访问元素的数据对象,通常用来增强代码的可读性
创建类实例
比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。
使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构。
# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 0:19'
from collections import namedtuple
website_list = [
('Sohu', 'http://www.google.com/', u'张朝阳'),
('Sina', 'http://www.sina.com.cn/', u'王志东'),
('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in website_list:
website = Website._make(website)
print(website)
2. deque
deque其实是双向队列的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象: .popleft(), .appendleft() 。
作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate 等
raw = [1,2,3]
d = collections.deque(raw)
print(d) #结果deque([1, 2, 3])
#右增
d.append(4)
print(d) #结果deque([1, 2, 3, 4])
#左增
d.appendleft(0)
print(d) #结果deque([0, 1, 2, 3, 4])
#左扩展
d.extend([5,6,7])
print(d) #结果deque([0, 1, 2, 3, 4, 5, 6, 7])
#右扩展
d.extendleft([-3,-2,-1])
print(d) #结果deque([-1, -2, -3, 0, 1, 2, 3, 4, 5, 6, 7])
#右弹出
r_pop = d.pop()
print(r_pop) #结果7
print(d) #结果deque([-1, -2, -3, 0, 1, 2, 3, 4, 5, 6])
#左弹出
l_pop = d.popleft()
print(l_pop) #结果-1
print(d) #结果deque([-2, -3, 0, 1, 2, 3, 4, 5, 6])
#将右边n个元素值取出加入到左边
print(d) #原队列deque([-2, -3, 0, 1, 2, 3, 4, 5, 6])
d.rotate(3)
print(d) #rotate以后为deque([4, 5, 6, -2, -3, 0, 1, 2, 3])
案例:一个无尽循环的跑马灯
# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 0:19'
import sys
import time
from collections import deque
fancy_loading = deque('>--------------------')
while True:
print('\r%s' % ''.join(fancy_loading))
fancy_loading.rotate(1)
sys.stdout.flush()
time.sleep(0.08)
3. Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)
from collections import Counter
>>> c = Counter("abcdcba")
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
>>> c["b"] = 0
>>> c
Counter({'a': 2, 'c': 2, 'd': 1, 'b': 0})
>>> del c["a"]
>>> c
Counter({'c': 2, 'b': 2, 'd': 1})
常见支持方法:
(1)elements()
elements就是将其中的key值乘以出现次数全部打印出来
from collections import Counter
c = Counter(cats=4, dogs=8, mouse=2)
print(list(c.elements()))
#输出结果:['cats', 'cats', 'cats', 'cats', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs','mouse', 'mouse']
(2)most_common([n])
n为可选参数,如果不输入n的值,则默认返回所有,输入-1则返回空,输入小于最长长度,则返回前n个数,输入等于最长长度,则返回所有
# 获取出现频率最高的2个字符
print(c.most_common(2))
案例: 使用Counter模块统计一段句子里面所有字符出现次数
# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 0:19'
from collections import Counter
s = '''A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'''.lower()
c = Counter(s)
# 获取出现频率最高的5个字符
print(c.most_common(5))
4 OrderedDict
在Python中,dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了。
from collections import OrderedDict
d = OrderedDict(a=11, b=2, c=3)
print(d) #会排序
5 defaultdict
在使用Python原生的数据结构dict的时候,如果用
d[key]这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。 但是,如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。
defaultdict很适合应用在一个key对应value list场合。
# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 0:19'
from collections import defaultdict
members = [
# Age, name
['male', 'John'],
['male', 'Jack'],
['female', 'Lily'],
['male', 'Pony'],
['female', 'Lucy'],
]
#{
# ‘male’:['john', 'jack','pony']
#}
result = defaultdict(list)
for sex, name in members:
result[sex].append(name)
print(result)
合并列表元素,并排序
from collections import defaultdict
s=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d=defaultdict(list)
for k, v in s:
d[k].append(v)
a=sorted(d.items())
print(a)
defaultdict还可以被用来计数,将default_factory设为int即可
字符串中的字母第一次出现时,字典中没有该字母,default_factory函数调用int()为其提供一个默认值0,加法操作将计算出每个字母出现的次数。
from collections import defaultdict
s = 'i am an chinese man, i love china.'
d = defaultdict(int)
for k in s:
d[k] += 1
print('\n',d)
a=sorted(d.items())
print('\n',a)
Collections库使用的更多相关文章
- Robot Framework学习笔记(五)------Collections 库
Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 1.添加类 在使用之前需要在测试套件(项目)中添加 2.创建字典 字典也是 ...
- $python collections库
collections库是python内置的集合库,本文主要讲解以下5种数据结构的用法: namedtuple 命名元组,是tuple的子类 deque 双向列表 defaultdict 有默认值的字 ...
- Robot Framework(Collections 库)
Collections 库 Collections 库同样为Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 在使用之前需要在测试套件(项目)中添加:
- robot_framewok自动化测试--(6)Collections 库
Collections 库 Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 在使用之前需要在测试套件(项目)中添加: 1. ...
- Screenshot 库和Collections 库
一.screenShot 是 robot framework的标准类库,用于截取当前窗口,需要手动加载. 示例: 运行结果: 二.Collections 库 Collections 库同样为 Robo ...
- collections库的namedtuple+pytest的使用
from collections import namedtupleTask=namedtuple('Task',['summary','owner','done','id'])Task.__new_ ...
- 【RF库Collections库测试】关键字append to list
Arguments:[ list_ | *values ]Adds `values` to the end of `list`.
- robotframework的学习笔记(十五)----robotframework标准库Collections
Collections库是RobotFramework用来处理列表和字典的库,官方文档是这样介绍的:A test library providing keywords for handling lis ...
- Robot framework(RF) Builti,Screenshot和Collections标准库介绍
1.1 Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一 ...
随机推荐
- 初学C#,总结一下.sln和.csproj的区别
1.sln:solusion 解决方案 csproj:c sharp project C#项目 csproj文件大家应该不会陌生,那就是C#项目文件的扩展名,它是“C Sharp Project”的缩 ...
- libz.so.1: cannot open shared object file: No such file or directory
在虚拟机安装xtrabackup工具时候出现的报错:libz.so.1: cannot open shared object file: No such file or directory [ro ...
- 【原创】java的反射机制
什么是java的反射?java在运行期间可以动态的加载.解析和使用一些在编译阶段并不确定的类型,这一机制被称作反射.它可以加载只有运行时才能确定的数据类型,解析类的内部结构,获取其基本信息,如方法.属 ...
- LA 3635 Pie
题意:给出n个圆,分给n+1个人,求每个人最多能够得到多大面积的圆 二分每个人得到的圆的面积 #include<iostream> #include<cstdio> #incl ...
- ZBrush中2.5D笔刷
ZBrush®是一个数字雕刻和3维建模软件,它不仅有着强大的3D雕刻功能,对于2.5D笔刷的应用也毫不逊色.本文主要讲解2.5D笔刷的一些使用方法,2.5D笔刷是针对贴图绘画的增效画笔工具和其他一些工 ...
- css鼠标滑过出现文字效果
模仿淘宝上鼠标移动到商品图片时,出现的文字效果. 1.效果图 鼠标移动到粉红色的区域,则出现黄色部分. 2.代码 <!DOCTYPE ...
- iOS开发——自动填充短信验证码
苹果在iOS 12,改进了一个很人性化的小细节.在做短信验证码功能的时候,自动获取短信中的验证码,然后点击填充即可.不用再向之前那样麻烦,自己看到弹出的短信信息后,死记硬背,再一个个敲上去,害怕背错了 ...
- BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)
题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃 ...
- 【转】Visual Studio單元測試小應用-測執行時間
[转]Visual Studio單元測試小應用-測執行時間 Visual Studio的單元測試會記錄每一個測試的執行時間,如果有幾個Method要測效能,以前我會用Stopwatch,最近我都改用單 ...
- Qt之设置应用程序图标
简述 应用程序图标,通常显示在应用程序的顶层窗口的左上角,通过调用QWindow:setWindowIcon()函数来实现. 为了改变可执行程序文件本身的图标,因为它被呈现在桌面上,它必须采用另一种依 ...