python-collections
collections提供了一些容器类,用来替代list,set,tuple,dict的标准容器
类名 | 用途 |
---|---|
namedtuple | 创建命名元祖子类的工厂函数 |
deque | 类似列表,实现了从两端快速添加和弹出 |
ChainMap | 类似字典,将多个映射集合到一个视图里 |
Counter | 类似字典,提供了可哈希对象的计数功能 |
OrderedDict | 字典的子类,保存了被添加的顺序 |
defaultdict | 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 |
UserDict | 封装了字典对象,简化了字典子类化 |
UserList | 封装了列表对象,简化了列表子类化 |
UserString | 封装了字符串对象,简化了字符串子类化 |
deque
deque是一个双向队列,创建队列时,如果指定maxlen,则创建固定长度的队列,当有新纪录加入队列而队列已满时会自动移除最老的那条记录
可以从两端添加和弹出元素
append(x)------添加到右端
appendleft(x)------添加到左端
pop()----移除最右侧的元素
popleft()-----移除最左侧的元素
from collections import deque
#创建一个长度固定的双向队列
de=deque(maxlen=3)
de.append(2)
de.append(3)
de.append(4)
print(list(de))
#队列已满,再次添加,会将2移除队列
de.append(5)
print(list(de))
print(de[2])
运行结果:
[2, 3, 4]
[3, 4, 5]
5
deque应用场景,保存最后N个元素
import re
from collections import deque
"""
对一系列的文本做简单的匹配操作,如果匹配则返回匹配的行以及检查过的前N行
分析:首先肯定要使用一个变量记录匹配的行,一个列表记录检查过的前N行(使用deque可以很方便的记录前N行)
一个文件中如果有多个匹配的行,如何记录这些匹配的行以及每一个匹配行的前N行,使用列表,元素是元组
"""def search_deque(flines,pattern,history=5):result=list()previoue_lines=deque(maxlen=history)for line in flines:previoue_lines.append(line)if re.search(pattern,line):#注意:这里要使用list将deque转化为list,否则,这里将添加的是deque对象,后续后的值也会改变result.append((line,list(previoue_lines)))return resultwith open("test","r") as f:for line,pline in search_deque(f,"python"):for item in pline:print(item,end=",")print(line)print("-"*20)
使用生成器将代码优化
def serch_deque_gen(flines,pattern,history=5):previous_line=deque(maxlen=history)for line in flines:if re.search(pattern,line):yield line,previous_lineprevious_line.append(line)with open("test","r") as f:for line,pline in serch_deque_gen(f,"python"):for item in pline:print(item,end=",")print(line)print("-"*20)
defaultdict
defaultdict(default_factory=None)
default_factory: 如果创建对象时传入default_factory,那字典会被初始化为default_factory
from collections import defaultdictdic1=defaultdict()
dic2=defaultdict(list)
dic3=defaultdict(int)print(dic1)
print(dic2)
print(dic3)
使用list作为default_factory,可以创建一个键-列表组成的字典
使用defaultdict的好处是:会自动初始化第一个值,这样后续可以直接使用+,append等方法
dic4=dict()
#因为列表没有被初始化,就直接使用append会报错
dic4["one"].append(4)
运行结果:
KeyError: 'one'
可以使用setdefault设置一个初始值
dic4=dict()
dic4.setdefault('one',[])
dic4["one"].append(4)
print(dic4)
from collections import defaultdictdic1=defaultdict(int)
dic1["one"]+=1
print(dic1)
OrderDict
创建有序字典
Counter
提供快速和方便计数,用于计数可哈希对象
class collections.Counter([iterable-or-mapping])
from collections import Counterc=Counter("werrieuuuueeewssdee")
print(c)
运行结果:
Counter({'e': 7, 'u': 4, 'w': 2, 'r': 2, 's': 2, 'i': 1, 'd': 1})
c1=Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(c1)
运行结果:
Counter({'blue': 3, 'red': 2, 'green': 1})
使用dict将Counter转化为普通字典
c1=Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(dict(c1))
运行结果:
{'red': 2, 'blue': 3, 'green': 1}
most_common
返回一个列表,出现次数最多的前n个元素
words=["look","into","my","eyes","look","iinto","my","eyes","the","eyes","the","eyes","not","around","under","into"]word_counts=Counter(words)
lst=word_counts.most_common(3)
print(lst)
运行结果:
[('eyes', 4), ('look', 2), ('into', 2)]
python-collections相关推荐
- 四种高性能数据类型,Python collections助你优化代码、简洁任务
在这篇文章中,机器学习工程师 George Seif 介绍了 Python collections 模块最受欢迎的四种数据类型以及它们各自的使用方法.这些数据类型可以对代码进行优化,进而实现更简洁的任 ...
- python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
collections有的功能: ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', 'UserString',\'Count ...
- 一文看懂Python collections模块的高效数据类型
原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...
- python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple
collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...
- python collections模块_Python 的collections模块
前言: collections是实现了特定目标的容器,以提供python标准内建容器dict,list,set和tuple的替代选择. Counter Counter是一个dict子类,主要是用来对你 ...
- python3 collections模块 tree_第30天: Python collections 模块
by 豆豆 1.简介 collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性. 2.常用功能 2.1 namedtupl ...
- defaultdict python3,Python collections.defaultdict() 与 dict的使用和区别|python3教程|python入门|python教程...
https://www.xin3721.com/eschool/python.html 在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collections. ...
- python collections 模块中的 deque
collections.deque介绍 collections 是 python 内建的一个集合模块,里面封装了许多集合类,其中队列相关的集合只有一个:deque. deque 是双边队列(doubl ...
- python collections(容器)模块
原文:http://docs.pythontab.com/interpy/collections/collections/ 容器(Collections) Python附带一个模块,它包含许多容器数据 ...
- Python collections的使用
collections是Python内建的一个集合模块,提供了许多有用的集合类. 本文将介绍以下几种方法: namedtuple Counter() deque OrderedDict 一.named ...
最新文章
- Android实现版本更新提示
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 交叉编译 OpenSSL 开源库 )
- Linux下动态链接库so文件覆盖导致coredump
- 广东移动节能绿色数据中心掀起“能耗革命”
- 1470: 区间求最值(RMQ问题,ST算法模板)
- 你是不是已经超纲了?一文解决JavaWeb中要求的HTML,是什么样的?
- 电大计算机应用技术基础视频,电大形成性测评-计算机应用技术基础01
- (10)FPGA面试题多位信号同步问题
- 修改常见服务器的banner
- Blackrock的思考与启示
- 锐起无盘服务器蓝屏死机,锐起无盘蓝屏怎么办?各类无盘蓝屏怎么办?
- vue 挑战最强大脑 记忆力5分 观察力5分 推理力4分
- 何为业务安全,业务安全部门的具体职责是什么?
- MYSQL基础教程书籍
- 【OpenCV3】直线拟合--FitLine()函数详解
- h5调用微信,微博等分享
- Fusion360学习记录:螺丝螺帽
- 欢乐颂2强势霸屏,黑科技已经植入生活,带我们飞
- MAX30102的优缺点
- 自动挡车驾车注意事项