python开发之collections模块

【文档学习】Python模块——collections(OrderedDict,包括Dict增加元素) 本系列【文档学习】记录了博主学习Python3.7.2中的各个模块的笔记。官方文档。 本文记录了数据类型容器(container datatypes)collections模块,源代码。更新于2019.03.14。 文章目录综述OrderedDictOrderedDict 范例和方法(recipes) 综述 这个模块实现了特殊数据容器,提供了Python标准内置容器dict,list,set和tu... 阅读详情

本节重点

1.了解Queue的基本概念和常用操作

2.学员了解collections模块

2.学员能掌握Counter、deque、defaultdict、namedtuple和OrderedDict数据类型的基本操作

collections模块

collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaultdict、namedtuple和OrderedDict等。

1.namedtuple: 生成可以使用名字来访问元素内容的tuple子类
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典

namedtuple

我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

p = (1, 2)
但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。

定义一个class又小题大做了,这时,namedtuple就派上了用场:

from collections import namedtuple
Point = namedtuple(‘Point’, [‘x’, ‘y’])
p = Point(1, 2)
p.x
1

p.y
2
namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。

可以验证创建的Point对象是tuple的一种子类:

isinstance(p, Point)
True

isinstance(p, tuple)
True
类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:

namedtuple(‘名称’, [属性list]):

Circle = namedtuple(‘Circle’, [‘x’, ‘y’, ‘r’])
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque
q = deque([‘a’, ‘b’, ‘c’])
q.append(‘x’)
q.appendleft(‘y’)
q
deque([‘y’, ‘a’, ‘b’, ‘c’, ‘x’])
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

defaultdict

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

from collections import defaultdict
dd = defaultdict(lambda: ‘N/A’)
dd[‘key1’] = ‘abc’
dd[‘key1’] # key1存在
‘abc’

dd[‘key2’] # key2不存在,返回默认值
‘N/A’
注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

如果要保持Key的顺序,可以用OrderedDict:

from collections import OrderedDict
d = dict([(‘a’, 1), (‘b’, 2), (‘c’, 3)])
d # dict的Key是无序的
{‘a’: 1, ‘c’: 3, ‘b’: 2}

od = OrderedDict([(‘a’, 1), (‘b’, 2), (‘c’, 3)])
od # OrderedDict的Key是有序的
OrderedDict([(‘a’, 1), (‘b’, 2), (‘c’, 3)])
注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

od = OrderedDict()
od[‘z’] = 1
od[‘y’] = 2
od[‘x’] = 3
od.keys() # 按照插入的Key的顺序返回
[‘z’, ‘y’, ‘x’]
OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print 'remove:', last
        if containsKey:
            del self[key]
            print 'set:', (key, value)
        else:
            print 'add:', (key, value)
        OrderedDict.__setitem__(self, key, value)

Counter

Counter是一个简单的计数器,例如,统计字符出现的个数:

>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
...     c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})

Counter实际上也是dict的一个子类,上面的结果可以看出,字符’g’、‘m’、'r’各出现了两次,其他字符各出现了一次。

终端以太网接入Internet实验 实验过程: 1.布局 2.连接 3.配置Route0和Route1 4.配置RIP 5.static: 6.查看Route0,Route1的路由表: 7.完成PC2和server0 IP地址,子网掩码和默认网关地址的配置: 8.命令行: 9.启动PC0桌面下的PPPoe宽带连接程序: 10.启动PC1桌面下的PPPoe宽带连接程序: 11.验证PC0和PC2的ICMP报文传输过程 12.验证PC1和server0的ICMP报文传输过程 关键命令说明 阅读详情

相关推荐

[Multisim][模电实验]简易函数信号发生器的设计与实现_北京邮电大学2019级信通院电子电路实验下

本文记述了笔者设计并实现以±12V供电电压输出1KHZ~10KHZ频率连续可调的方波、三角波和正弦波的过程。其中,方波输出电压峰峰值为12V(误差<20%),占空比可调、三角波输出电压峰峰值为8V(±20%),正弦波输出电压峰峰值≥1V。

lgc0208的博客 4万+

Python入门之collections模块

第1关:命名元组 (namedtuple) 任务描述 本关任务:完成对命名元组的简单操作。 命名元组 (namedtuple) Python 中提供了基础的不可变数据结构元组tuple,对元组元素的访问需通过索引来完成,对此需要熟记每个下标对应的具体含义。如果元素数量一多,要记清楚这些东西就会比较麻烦了,于是就出现了命名元组namedtuple。 创建命名元组 命名元组的构造函数接受两个参数typename,field_names: typename:元组的名字; field_names:元组各个元素的名称

wangyongqi的博客 1万+

USB-Type-C PCB布局布线设计规范

USB Type-C连接器有24个引脚。图1和图2分别显示了USB Type-C插座和插头的插针。母头/母座公头/插头可以很明显看出,插口内的Pin功能相对于中心对称。公头插入母头,无论正反插,引脚功能都完美契合。而且电源VBUS/GND都拥有4个Pin,最大支持5A电流,在保证高速数据传输的同时也提高了电流承载能力。表 1 和表 2 分别汇总了在 USB Type-C 型插座和插头上所使用的信号列表。

weixin_63005522的博客 8279

Python之默认字典 (defaultdict)

  任务描述 本关任务:补充函数代码,创建不同类型的默认字典。 默认字典 (defaultdict) 默认字典的功能与dict基本相同,但在访问一个不存在的key时,默认字典会提供一个默认值,而不是引发异常。 创建默认字典 默认字典的构造函数接受一个工厂函数default_factory作为参数,可以将一个类型名看做是一个工厂函数,比如list,tuple,str等。 这个函数会在要生...

Andone_hsx的博客 2543

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2249

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3263

python的collections模块详解

python的collections模块详解

m0_58086930的博客 1308

UGUI合批杀手:Mask/RectMask2D为何必断合批?

颜色缓冲负责记录像素颜色;模板缓冲负责记录“这个像素的模板值”(一个小整数);渲染时,你可以设定:只有模板值为 X 的地方才允许画;或者往某些区域写特定的模板值。类似于:先拿一支隐形笔在纸上画出一块区域,给它记一个编号“1”,后面的涂色动作只允许涂在“编号为1”的区域上。合批的前提:渲染状态不变,连续元素能一口气画完。材质、贴图、混合模式、Stencil、裁剪区域……都得一致。Mask / RectMask2D 的本质:在渲染状态上加规则——“只在某个区域内允许写像素”。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 119

Python入门:Python模块collections

转自:微点阅读https://www.weidianyuedu.com/content/1817388341618.html Python的内置模块collections有几个关键的数据结构,平常在使用的时候,开发者可以直接调用,不需要自己重复制造轮子,这样可以提高开发效率。 1. deque双端队列平常我们使用的python内置list类的append,extend,pop方法都是从list的尾部执行的(pop()默认弹出最后一个元素)。在使用的时候,list很像是一种栈结构(LIFO)。不同..

ysds20211402的博客 2178

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | CWDLoss(在线蒸馏 + 离线蒸馏)

这篇文章给大家带来最新改进的是模型的蒸馏利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv11的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 3308

学Simulink——基于Simulink的PMSM矢量控制(FOC)从零搭建

《Simulink下PMSM矢量控制(FOC)全流程开发指南》 本教程系统讲解了基于Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)实现方法。主要内容包括:FOC控制原理与双闭环架构设计、Simulink建模全流程(含PMSM本体建模、坐标变换、PI控制器设计等)、关键调试技巧以及工程扩展方向。教程以48V伺服电机为例,详细演示了从Clarke/Park变换到SVPWM生成的完整实现过程,并提供了参数配置建议和常见问题解决方案。通过本教程,读者可掌握FOC系统的核心实现技术,为开发高性能电机

xiaoheshang_123的博客 273

Python-collections

collections.deque

catfishH的博客 404

Autosar 下电过程-基于ETAS工具

本文介绍基于ETAS工具对应的BIP包的下电过程,仅供参考。在最后调用SBC下电时,需要理清楚SBC的休眠流程,否则可能会出现休眠又唤醒情况。后面有空会介绍9471的休眠流程。

赞的博客 811

Python开发【内置模块篇】collections

namedtuple namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。 这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。 >>> from collections import namedtu...

T_tang_eagle的博客 55

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python开发模块基础:collections模块&paramiko模块

一,collections模块 在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。1.namedtuple: 生成可以使用名字来访问元素内容的tuple2.deque: 双端队列,可以快速的从另外一侧追加和推出对象3.Count...

weixin_34204722的博客 140

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python进阶篇:10 内置模块collections/itertools

1、collections模块 from collections import namedtuple,deque,defaultdict,OrderedDict,Counter ''' collections是python内置的集合模块,提供了许多有用的集合类: (1)namedtuple (2)deque (3)defaultdict (4)OrderDict (5)Counter ...

u013089490的博客 275

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python collections 模块中的 deque(队列)

Python collections 模块中的 deque(队列)加粗样式

m0_37347812的博客 214

Python标准库——collections模块的Counter类

Python标准库——collections模块的Counter类

u014765410的博客 244

Python 中的collections

jjw_zyfx的博客 72

python collections求取两个集合的交集

chengde6896383的专栏 530

Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

  转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html   在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习,说不定以后哪天面试正好用上,文章后半段则介绍一下collections模块,因为这个模块相对于python提供的基本数据结构(list,tuple,dict)不被人们所熟悉,但是如果你对...

weixin_30530939的博客 88

python3 模块使用方法合集

Python3 collections模块使用详解 - 简书 (jianshu.com)

Nayido的博客 161

Python的collections模块中的OrderedDict有序字典

https://www.jb51.net/article/88146.htm

llxx1234的博客 406

Python collections-module官方文档

Python3 collections的官方文档

qq_39751320的博客 342

Python常用10个模块详解:提升开发效率的利器

Python作为一门功能强大且易于学习的编程语言,拥有丰富的标准库和第三方模块,能够帮助开发者快速实现各种功能。requests 模块是第三方库,用于发送HTTP请求,适用于API调用、网页抓取等场景。datetime 模块提供了日期和时间的处理功能,适用于日志记录、时间计算等场景。sys 模块提供了与Python解释器交互的功能,包括命令行参数、退出程序等。os 模块提供了与操作系统交互的功能,包括文件操作、目录管理、环境变量等。math 模块提供了丰富的数学函数,包括三角函数、对数、幂运算等。

Python_trys的博客 1099

总结一下全局abc模块,_collections_abc模块,collections.abc模块,collections包

最近学习进阶Python发现有些容易混淆的内容,例如本次标题中所写的全局abc模块,_collections_abc模块,collections包里面的abc模块,collections包。自己找了相关资料,发现一般都是单独分开写的,在此给放到一起对比一下,欢迎各位提建议 首先明白两个事情: 一:元类,用来创建类的类,父类为type或type本身 二:抽象基类,规定继承类必须具有抽象基类指定的方法,同时无法实例化,定义抽象基类为类名(metaclass=abc.ABCMeta),此时此类是抽象基类。 其次说

weixin_46437313的博客 1156
上一篇: 阿里python入门到精通手册公开发布,企业级教程
下一篇: Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值