collections模块

tuple的功能

只有可哈希的对象才可以作为字典的key,而immutable的对象是可哈希的

 

tuple的拆包,分别进行映射

拆包的灵活用法

tuple的不可变不是绝对的 

nametuple的详解 

__slots__是用于限制class里面有那些属性值的,可以自行去了解一下

from collections import namedtuple
User = namedtuple("User",["name","age","height","edu"])#实际上是创建一个类
#nametuple比class节省空间,少了部分内置的变量,内存和效率都比较高


user = User(name = "Akebi",age = 15,height= 158,edu="namei")#直接关键字传参
print(user.name,user.age,user.height,user.edu)


name_tuple = ("Akebi",15,158)#也可以使用元组来进行传参
user = User(*name_tuple,edu="namei")#*元组进行传参,简化了代码
print(user.name,user.age,user.height,user.edu)



#字典传参,关键字传参要加 “ ”
name_dict ={
    "name" :"Komichi",
    "age" : 14,
    "height" : 158
}
user = User(**name_dict,edu="namei")#键值传参是**
print(user.name,user.age,user.height,user.edu)

#利用nametuple内置函数_make()来实现初始化
user_tuple = ("Akebi",15,158,"namei")#缺陷是每一个具体的值都要列出来
user_list = ["Akebi",15,158,"namei"]#缺陷是每一个具体的值都要列出来
user_dict ={#dict也是可迭代的对象
    "name" :"Komichi",
    "age" : 14,
    "height" : 158,
    "edu" : "namei"
}
user = User._make(user_tuple)#_make()要传递一个itrable对象
user = User._make(user_list)
user = User._make(user_dict.values())#这里要拿dict的values进行迭代
print(user.name,user.age,user.height,user.edu)

#nametuple的内置函数_asdict()将tuple转换成dict
user_info_dict = user._asdict()
print(user_info_dict)#type:OrderDict
print(type(user_info_dict))

#nametuple实现拆包
name,age,*other = user
print(name,age,*other)

#函数传参的两种方式
# def Akebi(*args,**kargs):
#     pass
# Akebi("Komichi",14)传入的参数都属于*args
# Akebi(name = "Komichi",age = 14)传入的参数都属于**kargs

defaultdict功能详解 

defaultdict是用C语言来实现的

优化计数算法
使用dict内置函数setdefault()进行优化,key不存在会自动添加
默认值为0,比上面的if...in..更加高效,少做一次查询

 

将算法进行彻底的优化
key不存在的话会默认初始化为0

实现字典嵌套

函数也是可调用对象 

deque功能详解

双端队列,用C语言写的,性能比较高

浅拷贝
​​​​​
from collections import deque
user_deque = deque(["akebi1",["akebi2","akebi3"],"akebi4"])
user_deque2  = user_deque.copy()
##浅拷贝
user_deque2[1].append("akebi5")#如果修改的元素是列表或其他数据类型时,则被复制的deque也会改变(user_deque跟着变)
user_deque2[0] = "akebi0"#但如果修改的是字符串元素,那么被复制的deque数据不变

#而python自带的深拷贝则不会影响被拷贝的数据
#import copy #user_deque2 = copy.deepcopy(user_deque)

print(user_deque,user_deque2) 

---------------------------------------------------------------------------------------------------------------------------------

 

魔法函数更加正规的叫法是python协议 

魔法函数跟类本身没有什么关系,是python解释器直接可以调用的函数

deque是线程安全的(GIL全局解释器锁),list不是线程安全的

counter功能详解

用于统计数据

counter本身继承的是dict

合并操作

top n问题

解释:"堆"   ,  数据结构

 

OrderedDict功能详解 

但python3中的dict默认也是有序的
而python2的dict是无序的

ordereddict主要是3个函数

popitem,pop,move_to_end 

 

chainMap功能详解

user_dict1 = {"a":"akebi1","b":"akebi2"}
user_dict2 = {"c":"akebi3","d":"akebi4"}
for a , b in user_dict1.items():
    print(a,b)
for index in user_dict2.items():
    print(index)
print(user_dict1.items())#返回可视图对象

chainmap用于将上面的算法进行优化

from collections import ChainMap
user_dict1 = {"a":"akebi1","b":"akebi2"}
user_dict2 = {"b":"akebi3","d":"akebi4"}
new_dict = ChainMap(user_dict1,user_dict2)#当合并的键有重复时,进行遍历的时候只会遍历前面的哪一个
for a , b in new_dict.items():
    print(a,b)

#.maps以列表的形式将数据展现出来
print(new_dict.maps)#.maps不是拷贝,而是指向原来的两个dict数据,所以可以通过map来修改原来的数据
#所以chainmap并没有将前面的两个数据全部拷贝到新的结构里面,而是在原数据里面增加了迭代器

print(new_dict)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础详解三

一,函数的多返回值 def methodReturn():return 1,2x,ymethodReturn() print(x,y) 1 2 二,函数的多种参数使用形式 缺省参数: def method7(name,age,address"淄博"):print("name:"name",age"str(age)&quo…

你需要知道vim操作 源头都在vimtutor里

vim之源:vimtutor vim的五种模式Normal mode(正常模式)Insert mode(插入模式)Visual mode(可视模式)Replace mode(替换模式)Command-line mode(命令行模式&am…

Gradle 基础学习(三) 认识Command-Line Interface

Gradle命令行接口 除了IDE外,我们主要通过Gradle命令行接口来运行Gradle任务和管理Gradle项目。 下面是Gradle命令行使用的一些参考,熟悉后建议实际项目中使用Gradle Wrapper,gradle用法都可以替换为gradlew (macOS / Linux) 或gradlew.bat…

【SDN:逻辑上集中的控制平面,路由选择算法,LS路由工作过程,距离矢量路由选择(distance vector routing)】

文章目录 SDN:逻辑上集中的控制平面SDN的主要思路SDN控制平面和数据平面分离的优势SDN 架构: 数据平面交换机 路由选择算法路由(route)的概念最优化原则(optimality principle)路由的原则路由算法的分类LS路由工作过程(相当于一个上帝)链路状…

保护公司机密:避免员工带着数据说拜拜

公司的核心资产之一就是数据。无论是客户信息、研发代码、内部决议、财务报告、商业合同、设计图纸等都是公司的重要资产。如果这些数据在员工离职时被带走,或在员工在职期间不当行为导致数据泄露,将给公司带来重大损失。 然而,保护这些数据…

Ps中 饱和度 和 自然饱和度 的区别?

1.饱和度(Saturation):在Photoshop中,饱和度是一个全局性调整,它影响图像中所有颜色的鲜艳程度。当你增加饱和度时,所有的颜色都会变得更浓烈、更鲜艳;相反,减小饱和度会使图像整体变…

暗区突围国际服pc端海外版新手前期如何赚钱 暗区突围新手教学

暗区突围国际服pc端海外版新手前期如何赚钱 暗区突围新手教学 暗区突围是一款极为惊险的射击游戏,让玩家充分感受紧张激烈的战斗以及获取财富的过程。但是有许多新手玩家是不会在游戏里赚钱的,也会在赚钱过程中遇到很多问题,我将在这篇文章…

Learning Continuous Image Representation with Local Implicit Image Function

CVPR2021https://github.com/yinboc/liif 问题引入 图像普遍都是使用像素来表示的,而现实世界是连续的,所以本文借鉴3D中neural implicit representation的思想,以连续的方式表示图像;模型输入坐标值和坐标附近的特征&#xff0…

区块链 | NFT 水印:Review on Watermarking Techniques(一)

🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为: 可见 v i s i b l e \mathsf{visible} visi…

关于Anaconda常用的命令

常用命令 查看当前环境下的环境:conda env list查看当前conda的版本;conda --version conda create -n your_env_name pythonX.X(2.7、3.6等)命令创建python版本为X.X。名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装…

2024第16届成都教育连锁加盟展6月1日举办 免费参观

2024第16届成都教育连锁加盟展6月1日举办 免费参观 邀请函 主办单位: 中国西部教体融合博览会组委会 承办单位:重庆港华展览有限公司 博览会主题:责任教育科技兴邦 幼教、普教、高教、校外教育、K12学科辅导、婴幼儿教育、兴趣辅导、学…

STC8增强型单片机开发

1.C51版本Keil环境搭建 下载地址是 Keil Product Downloads 选择C51进行下载: 2.STC环境添加 STC-ISP下载 进入stc官网 深圳国芯人工智能有限公司-工具软件 3.将STC添加到Keil中 打开stc-isp工具 按照图例点击按钮 选择keil的安装目录,以实际安装目…

Nacos单机模式集成MySQL

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nacos支持三种部署…

VALSE 2024 Workshop报告分享┆ 大规模自动驾驶仿真系统研究

视觉与学习青年学者研讨会(VALSE)旨在为从事计算机视觉、图像处理、模式识别与机器学习研究的中国青年学者提供一个广泛而深入的学术交流平台。该平台旨在促进国内青年学者的思想交流和学术合作,以期在相关领域做出显著的学术贡献&#xff0c…

五月加仓比特币

作者:Arthur Hayes Co-Founder of 100x. 编译:Liam 编者注:本文略有删减 (以下内容仅代表作者个人观点,不应作为投资决策的依据,也不应被视为参与投资交易的建议或意见)。 从四月中旬到现在,当你…

动态规划——路径问题:931.下降路径最小和

文章目录 题目描述算法原理1.状态表示(经验题目)2.状态转移方程3.初始化4.填表顺序5.返回值 代码实现CJava 题目描述 题目链接:931.下降路径最小和 关于这⼀类题,看过我之前的博客的朋友对于状态表示以及状态转移是⽐较容易分析…

Java 中的 HTTP 客户端库OkHttp、Apache HttpClient和HttpUrlConnection

大家好,我是G探险者。 项目开发里面经常会有这么一种场景:与服务器进行 HTTP 通信。一般存在于服务间远程调用的场景 Java 生态系统提供了多种 HTTP 客户端库,每种都有其自己的特点、优势和适用场景。 本文将介绍几种主要的 Java HTTP 客户…

【练习3】

1.将二叉搜索树转为排序的双向链表 (好久没看数据结构,忘完了,学习大佬的代码) class Solution { public:Node* prenullptr,*headnullptr; //pre为每次遍历时的前一个节点,head记录头节点Node* treeToDoublyList(Node* root) {if…

Qt应用开发(拓展篇)——图表 QChart

一、前言 QChart是一个图形库模块,它可以实现不同类型的序列和其他图表相关对象(如图例和轴)的图形表示。要在布局中简单地显示图表,可以使用QChartView来代替QChart。此外,线条、样条、面积和散点序列可以通过使用QPolarChart类表示为极坐标…

Vue3 查看真实请求地址

上回说到Vue2查看真实请求地址,那么Vue3该如何查看呢? 传送门: Vue2 查看真实请求地址 1. bypass函数 使用bypass函数获取代理结果,设置响应头(请求头设置未生效,也可以在响应头上看)。 2. …
最新文章