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相关推荐

  1. 四种高性能数据类型,Python collections助你优化代码、简洁任务

    在这篇文章中,机器学习工程师 George Seif 介绍了 Python collections 模块最受欢迎的四种数据类型以及它们各自的使用方法.这些数据类型可以对代码进行优化,进而实现更简洁的任 ...

  2. python︱ collections模块(namedtuple/defaultdict/OrderedDict等)

    collections有的功能: ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', 'UserString',\'Count ...

  3. 一文看懂Python collections模块的高效数据类型

    原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...

  4. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  5. python collections模块_Python 的collections模块

    前言: collections是实现了特定目标的容器,以提供python标准内建容器dict,list,set和tuple的替代选择. Counter Counter是一个dict子类,主要是用来对你 ...

  6. python3 collections模块 tree_第30天: Python collections 模块

    by 豆豆 1.简介 collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性. 2.常用功能 2.1 namedtupl ...

  7. defaultdict python3,Python collections.defaultdict() 与 dict的使用和区别|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/python.html 在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collections. ...

  8. python collections 模块中的 deque

    collections.deque介绍 collections 是 python 内建的一个集合模块,里面封装了许多集合类,其中队列相关的集合只有一个:deque. deque 是双边队列(doubl ...

  9. python collections(容器)模块

    原文:http://docs.pythontab.com/interpy/collections/collections/ 容器(Collections) Python附带一个模块,它包含许多容器数据 ...

  10. Python collections的使用

    collections是Python内建的一个集合模块,提供了许多有用的集合类. 本文将介绍以下几种方法: namedtuple Counter() deque OrderedDict 一.named ...

最新文章

  1. Android实现版本更新提示
  2. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 交叉编译 OpenSSL 开源库 )
  3. Linux下动态链接库so文件覆盖导致coredump
  4. 广东移动节能绿色数据中心掀起“能耗革命”
  5. 1470: 区间求最值(RMQ问题,ST算法模板)
  6. 你是不是已经超纲了?一文解决JavaWeb中要求的HTML,是什么样的?
  7. 电大计算机应用技术基础视频,电大形成性测评-计算机应用技术基础01
  8. (10)FPGA面试题多位信号同步问题
  9. 修改常见服务器的banner
  10. Blackrock的思考与启示
  11. 锐起无盘服务器蓝屏死机,锐起无盘蓝屏怎么办?各类无盘蓝屏怎么办?
  12. vue 挑战最强大脑 记忆力5分 观察力5分 推理力4分
  13. 何为业务安全,业务安全部门的具体职责是什么?
  14. MYSQL基础教程书籍
  15. 【OpenCV3】直线拟合--FitLine()函数详解
  16. h5调用微信,微博等分享
  17. Fusion360学习记录:螺丝螺帽
  18. 欢乐颂2强势霸屏,黑科技已经植入生活,带我们飞
  19. MAX30102的优缺点
  20. 自动挡车驾车注意事项

热门文章

  1. python中的platform模块获取平台信息
  2. border-style之double实现三道杠
  3. 人工智能未来替代的职位,主要有哪些行业?
  4. Linux分区命令-parted
  5. gcc -fpic 和 -fPIC 参数问题
  6. sin cos 信号相加计算
  7. 如何在win10的windows Defender中添加信任文件,使其免遭误删除的厄运
  8. 不会用matplotlib画多子图?收好这2个套路
  9. texlive写论文源代码_使用Latex写论文
  10. js 定时器的开启与关闭