Python collections模块

collections 模块是Python标准库中提供的一个模块,用于提供一些额外的数据容器和工具,扩展了内置的数据类型。它包含了一些有用的类和函数,用于处理各种数据结构和算法问题。下面是 collections 模块中常用的几个类的详细介绍:

1.namedtuple(具名元组):

namedtuple 是一个工厂函数,用于创建具有字段名的元组。它类似于普通的元组,但可以通过字段名进行访问,而不仅仅是通过索引。namedtuple 可以用于创建轻量级的数据对象,比如表示一条记录或数据点。使用 namedtuple 可以提高代码的可读性和易用性。

from collections import namedtuple# 创建一个具名元组类 Point,包含 x 和 y 两个字段
Point = namedtuple('Point', ['x', 'y'])# 创建具名元组对象
p = Point(1, 2)# 访问具名元组中的字段
print(p.x)  # 输出: 1
print(p.y)  # 输出: 2

2.deque(双端队列):

deque 是一个双端队列,支持从两端高效地添加和删除元素。与列表相比,deque 在执行插入和删除操作时具有更好的性能,特别是在大型数据集上。deque 还提供了一些附加的方法,如旋转、扩展和反转等。

from collections import deque# 创建一个双端队列
dq = deque([1, 2, 3])# 从右侧添加元素
dq.append(4)# 从左侧添加元素
dq.appendleft(0)# 从右侧弹出元素
dq.pop()  # 返回 4# 从左侧弹出元素
dq.popleft()  # 返回 0# 旋转队列,将右侧的元素移动到左侧
dq.rotate(1)

3.Counter(计数器):

Counter 是一个简单的计数器类,用于统计可哈希对象的出现次数。它可以接受可迭代对象作为输入,并返回一个字典,其中包含对象作为键,出现次数作为值。Counter 还提供了一些方便的方法,如获取最常见的元素、计算总数等 

from collections import Counter# 创建一个计数器
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])# 统计元素的个数
print(c['a'])  # 输出: 3# 获取最常见的元素和对应的次数
print(c.most_common(2))  # 输出: [('a', 3), ('b', 2)]

4.defaultdict(默认字典):

defaultdict 是一个字典的子类,它在访问不存在的键时返回一个默认值。通过指定默认工厂函数,可以自定义默认值的类型。defaultdict 在处理缺失键时非常有用,可以避免键错误和异常。

from collections import defaultdict# 创建一个默认字典,指定默认值为 0
d = defaultdict(int)# 访问不存在的键,默认返回 0
print(d['a'])  # 输出: 0# 计数器示例
s = 'abracadabra'
counter = defaultdict(int)
for char in s:counter[char] += 1

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot(自定义转换器+处理Json+内容协商)

文章目录 1.自定义转换器1.代码实例1.save.html2.编写两个bean1.Car.java2.Monster.java 3.WebConfig.java 配置类来自定义转换器4.测试 2.注意事项和细节1.debug查看转换器总数1.打断点2.执行到断点后,选左边的1923.可以看出,加上自定义的转换器一共125…

嵌入式方向还有希望吗?

我刚开始学习,也不知道我定位的是单片机工程师,嵌入式工程师职位的。 我只知道电子工程师,这个职位其实偏硬件,很多岗位需求是硬件设计,PCB设计,还要懂焊接、各种仪器仪表使用,还有些需要懂单片…

1千多条中医中药知识及问答ACCESS\EXCEL数据库

今天从一个中医相关的产品中获得了一些数据,比如:《1千多条中医中药知识及问答》、《1千多条中医方剂知识问答》、《690条中医疾病疾病知识问答》,数据库表结构基本相同的。不理解请勿选择,谢谢。 数据包含5个表(A一级…

鸿蒙开发实战:【电话服务子系统】

简介 电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息。 各个模块主要作用如下: 核心服务模块:主要功能是初始化RI…

IDEA启动项目到一半后卡住但不报错的解决方法分享

问题现象: 今天在启动项目的时候,微服务启动到后,控制台日志打印到一半之后,就不在打印了,卡住不动,无任何异常日志,项目也无法启动成功,如下: 原因分析: I…

ArcGIS学习(十五)用地适宜性评价

ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…

跨域问题解决方案

在Web开发的时候会遇见一个常见的问题,跨域问题,这也是前后端分离的场景常见的问题,下面来看看这个东西是啥,如何应用的吧? 技术派中的跨域问题,有两处,一处是加载CDN图片时;一处是a…

为什localhost被forbidden而127.0.0.1不被绊?

原因: 判段网关的时候判127.0.0.1,所以最好改localhost 其他参考: 【计算机网络】localhost不能访问,127.0.0.1可以访问?_ping localhost和ping 127.0.0.1-CSDN博客

CesiumJS 沙盒

CesiumJS 沙盒 通过CesiumJS 沙盒快速测试CesiumJS的一些功能,免去安装开发环境的困恼。 Hello World https://sandcastle.cesium.com/index.html 简单修改(F8运行):去掉界面上UI const viewer new Cesium.Viewer("cesi…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

谁将主导未来AI市场?Claude3、Gemini、Sora与GPT-4的技术比拼

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚…