Python collections模块
1.简介
collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。
2.常用功能
2.1 namedtuple 功能详解
namedtuple() 返回一个新的元组子类,且规定了元组的元素的个数,同时除了使用下标获取元素之外,还可以通过属性直接获取。
from collections import namedtuple
User = namedtuple("User",["name", "age", "weight"])
user = User("admin", "20", "60")
name, age, weight = user
print(user[0])
print(name, age, weight)
print(user.name, user.age, user.weight)
# 输出结果如下
admin
admin 20 60
admin 20 60
由以上代码可以看出,namedtuple() 相当于直接定义了一个新的类,但是这个类跟传统的定义 class 的方式又有着巨大的区别。该方式会比直接定义 class 的方式省很多空间,其次其返回值是一个 tuple,支持 tuple 的各种操场。
同时,namedtuple() 还自带两个非常好用的方法。
# 将序列直接转换为新的 tuple 对象
user = ["root", 32, 65]
user = User._make(user)
print(user)
# 输出 User(name='root', age=32, weight=65)
# 返回一个 dict
user = User("admin", 20, 60)
print(user._asdict())
# 输出 OrderedDict([('name', 'admin'), ('age', 20), ('weight', 60)])
2.2 ChainMap 功能讲解
ChainMap() 可以将多个字典集合到一个字典中去,对外提供一个统一的视图。注意:该操作并是不将所有字典做了一次拷贝,实际上是在多个字典的上层又进行了一次封装而已。
from collections import ChainMap
user1 = {"name":"admin", "age":"20"}
user2 = {"name":"root", "weight": 65}
users = ChainMap(user1, user2)
print(users.maps)
users.maps[0]["name"] = "tiger"
print(users.maps)
for key, value in users.items():
print(key, value)
# 输出如下
[{'name': 'admin', 'age': '20'}, {'name': 'root', 'weight': 65}]
[{'name': 'tiger', 'age': '20'}, {'name': 'root', 'weight': 65}]
name tiger
weight 65
age 20
由此可见,如果 ChainMap() 中的多个字典有重复 key,查看的时候可以看到所有的 key,但遍历的时候却只会遍历 key 第一次出现的位置,其余的忽略。同时,我们可以通过返回的新的视图来更新原来的的字典数据。进一步验证了该操作不是做的拷贝,而是直接指向原字典。
2.3 deque 功能详解
dqueue 是 ”double-ended queue” 的简称,是一种类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)操作。大大加快了遍历速度
from collections import deque
q = deque([1, 2, 3])
q.append('4')
q.appendleft('0')
print(q)
print(q.popleft())
# 输出如下
deque(['0', 1, 2, 3, '4'])
0
2.4 Counter 功能详解
Counter 可以简单理解为一个计数器,可以统计每个元素出现的次数,同样 Counter() 是需要接受一个可迭代的对象的。
from collections import Counter
animals = ["cat", "dog", "cat", "bird", "horse", "tiger", "horse", "cat"]
animals_counter = Counter(animals)
print(animals_counter)
print(animals_counter.most_common(2))
Counter({'cat': 3, 'horse': 2, 'dog': 1, 'bird': 1, 'tiger': 1})
[('cat', 3), ('horse', 2)]
# 输出如下
Counter({'cat': 3, 'horse': 2, 'dog': 1, 'bird': 1, 'tiger': 1})
[('cat', 3), ('horse', 2)]
其实一个 Counter 就是一个字典,其额外提供的 most_common()
函数通常用于求 Top k 问题。
2.5 OrderedDict 功能详解
OrderedDict 是字典的子类,保证了元素的插入顺序。在 3.7 版本下,字典同样也保证了元素的插入顺序。那相比内置字典 OrderedDict 有哪些升级呢。
-
算法上, OrderedDict 可以比 dict 更好地处理频繁的重新排序操作。在跟踪最近的访问这种场景(例如在 LRU cache)下非常适用。
-
OrderedDict 类有一个 move_to_end() 方法,可以有效地将元素移动到任一端
from collections import OrderedDict
user = OrderedDict()
user["name"] = "admin"
user["age"] = 23
user["weight"] = 65
print(user)
user.move_to_end("name") # 将元素移动至末尾
print(user)
user.move_to_end("name", last = False) # 将元素移动至开头
print(user)
# 输出如下
OrderedDict([('name', 'admin'), ('age', 23), ('weight', 65)])
OrderedDict([('age', 23), ('weight', 65), ('name', 'admin')])
OrderedDict([('name', 'admin'), ('age', 23), ('weight', 65)])
2.6 defaultdict 功能详解
defaultdict 是内置 dict 类的子类。它实现了当 key 不存在是返回默认值的功能,除此之外,与内置 dict 功能完全一样。
from collections import defaultdict
default_dict = defaultdict(int)
default_dict["x"] = 10
print(default_dict["x"])
print(default_dict["y"])
# 输出如下
10
0
注意,defaultdict 的参数必须是可操作的。比如 python 内置类型,或者无参的可调用的函数。
def getUserInfo():
return {
"name" : "",
"age" : 0
}
default_dict = defaultdict(getUserInfo)
admin = default_dict["admin"]
print(admin)
admin["age"] = 34
print(admin)
# 输出如下
{'name': '', 'age': 0}
{'name': '', 'age': 34}
上述示例我们给 defaultdict 传了一个自定义函数,当字典中不存在所取 key 时返回默认的用户信息。
collections 总结
本文总结了 collections 提供的便利的操作,掌握这些知识将大大提高你的编程效率。
相关文章:
Python collections模块
1.简介 collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。 2.常用功能 2.1 namedtuple 功能详解 namedtuple() 返回一个新的元组子类,且规定了元组的元素的个数&…...

Qt-学习 QJson协议解析
内容来源于哔站视频,仅仅作为自己的笔记记录,感兴趣的小伙伴去原作品大call(此处给作者三鞠躬),Json以及Json在Qt中的使用 【Qt/C/C】_哔哩哔哩_bilibili 目录 1、Json介绍: 1.1 Json的定义 1.2 Json的数据格式 1…...
Git的安装与连接
在软件开发中,版本控制是非常重要的一环。Git是一种流行的版本控制工具,它可以帮助开发者管理代码并协作开发。本文将介绍如何连接Git。 首先,我们需要安装Git。在Windows上,可以从Git官网下载安装程序。在Linux上,可…...

MySQL5.0完全卸载教程
一、停止MySQL服务 在系统服务中找到mysql服务并停止即可。 二、卸载mysql应用程序 在控制面板中卸载mysql应用程序 三、删除mysql文件夹 找到mysql一开始安装路径的文件夹,然后删除掉该整个文件夹。 四、删除注册表 (1)按winR键,…...
rpm包编译工具rpmbuild使用介绍
rpmbuild是一个命令行工具,用于构建RPM(Red Hat Package Manager)软件包。RPM是一种用于在Linux系统上安装和管理软件的标准格式。rpmbuild可以将源代码或二进制文件打包成RPM软件包,并为之配置元数据、依赖项、文件列表等。rpmbu…...
vue3中使用cherry-markDown步骤
附cherry-markDown官网及api使用示例 官网:GitHub - Tencent/cherry-markdown: ✨ A Markdown Editor api:Cherry Markdown API 考虑到复用性,我在插件的基础上做了二次封装,步骤如下: 1.下载 npm install cherry-ma…...

数据建模方法论及实施步骤
了解数据建模之前首先要知道的是什么是数据模型。数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。 一、概要:数据…...
AUTOSAR知识点 之 COM (一):基础知识
目录 1、概述 1.1、简介 1.2、各模块依赖关系 1.2.1、PDUR关系 1.2.2、RTE 2、SPEC解读...

自媒体品牌宣传策略注意哪些,是怎么种草的
众所周知,小红书平台有着极其强大的种草能力。不论新品牌孵化,还是大品牌扩张,都会将目光投注到这里,那么小红书的品牌宣传策略究竟是怎样的呢。 一、聚焦种草能力 前面已经提到了,小红书平台是一个以“种草”为特色的…...

网络带宽管理
网络某一部分的带宽使用过多,可能会影响整个网络的性能,带宽问题甚至会影响业务关键型服务并导致网络停机。在企业中保持稳定的网络性能可能具有挑战性,因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应…...

SpringCloud(27. Redis 和 ZK 分布式锁)
上一篇 :26.分布式服务框架Dubbo面试题简析 1. redis 分布式锁 官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点: 互斥(只能有一个客户端获取锁)不能死锁容错(…...

运行时栈帧结构与方法调用
1 运行时栈帧结构 Java虚拟机以方法作为最基本执行单元,“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 1.1 局部变量表 局部变量表的容量以变量槽为最小单位。 Java…...

VSCode +gdb+gdbserver远程调试arm开发板
一、下载编译器 从ARM官网下载gcc-arm编译器,编译器中自带gdb和gdbserver,可以省去自己编译。 注:gdb是电脑端程序,gdbserver是arm开发板程序 arm官网链接:https://developer.arm.com/downloads/-/arm-gnu-toolchain-d…...
阿里云大学考试python中级题目及解析-python高级
阿里云大学考试python高级题目及解析 1.以上代码输出结果为 a [1,2,3,None,(),[],] print(len(a))A.4 B.5 C.6 D.syntax error C 列表中元素可以存储任意数据类型 2.将字符串s 中的字母a替换为字母,以下代码正确的是 A.s.swap(“b”,“a”) B.s.r…...

基于FPGA的车牌识别
基于FPGA进行车牌识别 基于FPGA进行车牌识别 1. 文件说明2. 程序移植说明3. 小小的编程感想 本项目的原理讲解视频已经上传到B站“基于FPGA进行车牌识别”。 本项目全部开源,见我本人的Github仓库“License-Plate-Recognition-FPGA”。 1. 文件说明 小技巧&…...

Qt - 进程/线程 补充进阶
Qt - 进程/线程 补充进阶 多线程quit / eixt / terminate QThread例子tdicethread 类.h.cpp widget 类.h.cpp 线程同步 多线程 quit / eixt / terminate quit 应用程序或线程安全的取消事件处理队列的执行,并随后使线程退出(如果只希望结束线程并保证它…...

spring笔记
spring 和 springboot的区别 自动配置原理 beanFactory接口和ApplicationContext接口 两个都是 IOC 容器 ApplicationContext接口是BeanFactory接口实现类的子类 功能: ApplicationContext扩展BeanFactory BeanFactoryApplicationContext控制反转国际化支持 …...
最大熵模型
最大熵模型(maximum entropy model)由最大熵原理推导实现 最大熵原理 最大熵原理是概率模型学习的一个准则。最大熵原理认为,学习概率模型时,在所有可能的概率模型(分布)中,熵最大的模型时最好…...
微服务中网关的配置
一、添加 Spring Cloud Gateway 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>二、配置网关路由 在application.yaml中配置如下内容:…...

Linux基本指令实现4及热键指令详解
目录 Linux热键补充: 1.bc指令: Tab键的智能补充: ctrlc键: uname指令: lscpu指令: lsmem指令: df -h指令: 关机指令: 扩展指令: Linux热键补充&#…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...