effective python学习笔记_列表与字典

学习对序列做切片

实现了__getitem__类即可支持切片,实现了__setitem__类可支持切片赋值

切片时下标索引可以越界,但按下标访问元素不可以越界,会IndexError

可以通过切片赋值不相等数量元素实现元素添加或赋值

切片不建议同时提供起始下标和步进,一次切片只用其中一个就行,如果两个非要用建议两次切片,因为同时写会比较难懂。两次切片时,第一次用步进还是起始下标,可以看用哪个获取的切片最短就用哪个,因为切片是浅拷贝,元素越少越省内存

用*unpacking捕获多个元素而不是序列切片

对序列切片赋值给变量因为序列切片下标会比较凌乱,推荐用形如*a, b = lista赋值

写法需注意,使用带*解包时,并列需要一个普通不带*的变量,如果只有一个带*的变量,还不如不带*。而且一个表达式赋值号左边不可以出现两个以上带*变量,元素数量会不确定

*解包得到的变量一定是一个列表,如果没有元素分配则是个空列表

优点是写法更清晰,比用切片分割序列赋值更好点

sort时用key参数表明sort依据

sort默认用升序排列元素

当对自定义对象排序时,如果不处理可能会报错,此时可通过给sort函数传入key参数对应排序逻辑(函数),可用lambda

当需要多个依据比较时,lambda函数可返回一个元组,比较时会按元素从前往后比较。但多个依据比较时,sort函数只能按升或降排所有元素,不能a元素升序然后b元素降序,可以通过元素前面添加负号实现反排序,但一元减操作符不支持所有类型,比如str无法用-'a'。此种情况可以多次sort排序,因为sort排序是个稳定排序算法(元素排序相等时,排序前后元素的相对前后位置不会改变,如果改变了则是不稳定排序)

不应依赖字典类型添加元素的原始顺序

py3.5以前,字典不保证插入元素顺序和迭代顺序一致,py3.6以后保持了一致,因为字典保存了添加元素的顺序,类属性也类似于字典,后来会保存属性顺序,属性顺序即为属性定义顺序

其实保留插入顺序的dict和collections.OrderedDict很像,但性能有区别,如果频繁增删改,可优先考虑OrderedDict,性能可能好点,详见 稳定和性能章节笔记

当需要强制执行函数注解检查时,可以python -m mypy --strict abc.py。这样当函数入参和注解不一样时,mypy会检查出来并打日志

key不在字典中时用get判断而不是in和KeyError

判断字典是否包含key有如下方法:in判断,捕获keyerror,get方法和setdefault方法

get相比于in和KeyError可避免重复赋值,更简单,而in需要写两遍key,keyerror需要用try捕获也要写两次

先get字典值,再判断这个获取的值,其实用了一行代码,可以用海象运算符替代(py3.8以上才能用)

用setdefault虽然相比海象运算符可减少一行代码,但不好懂,且每次调用无论key是否存在都需要实例化默认值,如果是自定义类,可能会有一些性能开销

用defaultdict处理key不存在情况而不是setdefault

优点 1default只有键不存在才会创默认值,键存在时不会创默认值,省开销,setdefault无论键是否存在都会实例化默认值,开销大 2defaultdict无需setdefault写法,更简介易懂

用__missing__构造依赖键的默认值

当get,in,keyerror,setdefault,defaultdict都无法满足要求时,可用__missing__处理缺失键的情况,可继承dict然后实现__missing__方法,比如当希望defaultdict默认值支持入参时,前五种方法都不太行,需要用__missing__方法

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

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

相关文章

三维天地助力实验室质量管理工作无纸化、流程化、标准化

质量管理是实验室日常管理工作中的重点内容,目前大多数实验室信息化的方向还是以实验主流程向无纸化转变为主,质量管理工作仍然依靠线下纸质文件或者线上登记台账的方式进行,这种方式存在任务流转效率低、资源浪费等问题,此外历史数据难以保存也是实验室管理人员的一大痛点。 …

【Android】Room数据库的简单使用方法

Room数据库的使用方法 目录 1、添加Room数据库的依赖2、Entity——定义实体类 2.1 定义主键——PrimaryKey2.2 字段注解——ColumnInfo 3、Dao——定义数据访问对象4、Database——数据库 4.1 通过回调观察数据库是否创建成功 5、使用时注意点6、编写异步 DAO 查询 6.1 写异步…

24_Scala集合Map

文章目录 Scala集合Map1.构建Map2.增删改查3.Map的get操作细节 Scala集合Map –默认immutable –概念和Java一致 1.构建Map –创建kv键值对 && kv键值对的表达 –创建immutable map –创建mutable map //1.1 构建一个kv键值对 val kv "a" -> 1 print…

Java IO流(二)

1. 缓冲流 1.1 字节缓冲流概述 当对文件或其他数据源进行频繁的读/写操作时,效率比较低,这时如果使用缓存流就能够更高效地读/写信息。 比如,可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。 如果用生活中的例子做…

多模态EDA论文小记

论文地址 该论文主要改进点是:通过动态化局部搜索中每个集群大小,高斯和柯西分布共同产生个体。总的来说改进点不多,当然也可能是笔者还没发现。 局部搜索 划分集群 划分集群有两个策略分别是: 随机生成一个点作为中心点&…

什么软件可以把视频合并在一起?6个软件教你快速进行视频编辑

什么软件可以把视频合并在一起?6个软件教你快速进行视频编辑 当你需要对视频进行编辑和合并时,选择合适的软件可以极大地提高工作效率和编辑质量。以下是六款被广泛认可且功能强大的视频编辑软件,它们可以帮助你快速、高效地进行视频编辑和合…

PDF转word转ppt软件

下载地址:PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件,电脑自带的又要开会员啥的很麻烦,现在分享这款软件直接激活就可以免费使用了,超级好用,喜欢的可以下载

C++从入门到精通---模版

文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式,旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型,而不是具体的类型,从而使代码更加灵活和可重用。 在…

NodeMCU ESP8266 操作 SSD1306 OLED显示屏详解(图文并茂)

文章目录 1 模块介绍2 接线介绍3 安装SSD1306驱动库4 源码分析4.1 硬件兼容性4.2 可能存在的问题总结1 模块介绍 我们将在本教程中使用的OLED显示屏是SSD1306型号:单色0.96英寸显示屏,像素为12864,如下图所示。 OLED显示屏不需要背光,这在黑暗环境中会产生非常好的对比度。…

全面的Partisia Blockchain 生态 4 月市场进展解读

Partisia Blockchain 是一个以高迸发、隐私、高度可互操作性、可拓展为特性的 Layer1 网络。通过将 MPC 技术方案引入到区块链系统中,以零知识证明(ZK)技术和多方计算(MPC)为基础,共同保障在不影响网络完整…

Springboot+Vue项目-基于Java+MySQL的个人云盘管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

去除图片水印软件-inpaint

一、普通使用教程 亲眼看看使用 Inpaint 从照片中删除不需要的元素是多么容易: 1.1加载图片 1.2 选择要纠正的问题区域 1.3 告别不需要的对象并保存 二、功能 1 修复旧照片 老并不总是意味着坏。我们拥有的一些旧照片对我们来说仍然很重要,因为它们仍…

FPGA ov5640视频以太网传输

1 实验任务 使用DFZU4EV MPSoC 开发板及双目OV5640摄像头其中一个摄像头实现图像采集,并通过开发板上的以太网接口发送给上位机实时显示。 2 Verilog代码 2.1 顶层模块 timescale 1ns / 1ps //以太网传输视频顶层模块module ov5640_udp_pc (input sys_cl…

威客网上招标系统(五)

目录 5 详细设计 5.1 系统首页 5.1.1系统首页(网站首页index.jsp) 5.1.2 下沙派威客网首页界面说明 5.2 站内新闻信息 5.2.1站内新闻操作界面 5.2.2系统主操作界面说明 5.3威客在线操作界面 5.3.1 威客在线操作界面 5.3.2威客在线说明 5.4系统…

PCIe下一代线缆标准CopprLink发布

作为业界广泛采用的高速串行点对点互联标准,PCIe自诞生以来历经多次迭代升级,现已成为CPU、GPU、FPGA、SSD等计算设备间不可或缺的互连桥梁。PCIe 7.0标准更是将数据传输速率提升至令人惊叹的32 GB/s(每通道)。 然而,面…

[MySQL数据库] Java的JDBC编程(MySQL数据库基础操作完结)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

力扣hot100:199. 二叉树的右视图/437. 路径总和 III(dfs/回溯/树上前缀和/哈希表)

文章目录 一、LeetCode:199. 二叉树的右视图二、LeetCode:437. 路径总和 III 一、LeetCode:199. 二叉树的右视图 LeetCode:199. 二叉树的右视图 差点因为是个中等题打退堂鼓。其实比较简单。 右视图实际上只需要找到&#xff0c…

VitePress快速上手

完整教程:https://blog.share888.top/note/front-end/vitePress/01-vitePress%E5%AE%89%E8%A3%85.html https://blog.share888.top/ VitePress快速上手 官方文档:https://vitepress.dev/zh/guide/markdown VitePress中文网:https://vitejs…

二叉树的基础遍历2.0

1.0入口:二叉树的基础遍历-CSDN博客 在1.0中使用的是简单的结构体建树,本文注重用二维vector建树。 前序,中序和后序的分析1.0已给出,本文不做过多介绍,本文重点讲二叉树的层序遍历。 先奉上前中后序的代码&#xf…

基士得耶(GESTETNER ) CP 6303C 速印机简介

规格参数 产品名称: 基士得耶(GESTETNER ) CP 6303C 速印机 品牌中文: 基士得耶/GESTETNER 型 号: CP-6303C 工作方式: 数码式 制版方式: 自动印刷 制版时间: 曝光玻璃: 31秒(A4长边…
最新文章