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.mzph.cn/pingmian/12299.shtml

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

相关文章

【Shell】Shell编程之函数

目录 1.Shell函数定义 2.Shell函数的作用 3.函数返回值 4.函数传参 5.函数变量的作用范围 案例 1.Shell函数定义 格式1 function 函数名 { 命令序列 } 格式2 函数名() { 命令序列 } 2.Shell函数的作用 使用函数可以避免代码重复 使用函数可以将大的工程分割为若…

2024OD机试卷-素数之积 (java\python\c++)

题目:素数之积 题目描述 RSA加密算法 在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 输入描述 一个正整数 num 0 < num < 2147483647 输出描述 如果…

供水设备数据采集

随着城市化进程的加快&#xff0c;供水系统作为城市基础设施的重要组成部分&#xff0c;其运行效率和稳定性直接关系到市民的日常生活。在这个信息化、智能化的时代&#xff0c;如何利用先进技术提升供水系统的管理水平&#xff0c;成为了摆在我们面前的重要课题。HiWoo Cloud平…

java+jsp+sql server 医院住院管理系统论文(二)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

vue+cesium项目demo

使用turf时在index.html中引用 <!-- 使用unpkg --> <script src"https://unpkg.com/turf/turf/turf.min.js"></script> <template><div class"cesium_box" id"cesiumContatiner"></div><button class&q…

【保姆级教程】VMware Workstation Pro的虚拟机导入vritualbox详细教程

解决方案 1、OVF格式2、VMX格式 1、OVF格式 选定需要导出的虚拟机&#xff08;关闭或者挂起状态下&#xff09;依次选择文件-导出为ovf 在Vritualbox导入刚刚导出的.ovf文件 更改路径&#xff0c;按实际需要修改 成功导入 2、VMX格式 如果在VMware Workstation Pro导出的…

Vue实战技巧 —— 企业开发实战中的常见疑难问题

Vue企业开发实战中的常见疑难问题 1. 解决Vue动态路由参数变化&#xff0c;页面数据不更新2. vue组件里定时器销毁问题3. vue实现按需加载组件的两种方式4. 组件之间&#xff0c;父子组件之间的通信方案5. Vue中获取当前父元素&#xff0c;子元素&#xff0c;兄弟元素6. 开发环…

安卓手机APP开发__支持不同的语言和文化

安卓手机APP开发__支持不同的语言和文化 目录 概述 创建本地的目录和资源文件 在你的app中使用资源 结构化消息中的文本 概述 APP包括了能被指定为一种特定的文件的资源。例如&#xff0c;一个APP能够包括 特定的文件的字符串&#xff0c;这个字符串能被翻译为本地的语言…

pg数据库的热备

Pg数据库主从复制 ​ 前言&#xff1a;公司的一台服务器因为断电导致系统损坏&#xff0c;经过3天的抢修&#xff0c;将服务器和数据恢复。为了避免数据的丢失&#xff0c;先将数据备份&#xff0c;并进行高可用。 ​ 采用技术&#xff1a;keepalivedpg ​ 后期并实现zabbix…

传说中的运维门户设计

在IT服务管理这片广阔天地中&#xff0c;运维门户如同一位技艺高超的魔术师&#xff0c;轻轻一挥手&#xff0c;便将纷繁复杂的运维世界化繁为简&#xff0c;编织成一张便捷高效、触手可及的网络。它不仅是ITSM系统中不可或缺的一环&#xff0c;更是连接用户与技术世界的桥梁&a…

Spring WebFlux:响应式编程

在软件开发领域&#xff0c;随着互联网应用的规模和复杂性不断增加&#xff0c;传统的编程模型逐渐暴露出一些局限性&#xff0c;尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;应运而生…

Java字符串去除空格的方法

前言 在Java编程实践中&#xff0c;处理字符串中的空格是一项基本且频繁的操作。本文将深入探讨如何使用Java原生方法以及Apache Commons Lang库中的StringUtils类&#xff0c;全方位解决字符串去空格的需求&#xff0c;让你的代码更加健壮和高效。 1. Java原生方法 a. trim…

电商核心技术揭秘56:客户关系管理与忠诚度提升

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言客户关系管理&#xff08;CRM&#xff09;的重要性提升顾客体验数据驱…

AWS之云种类与云服务模式

云种类分为3种&#xff1a; 公有云&#xff1a;任何个人或者企业都可以通过注册的方式直接使用的云。&#xff08;特点&#xff1a;使用简单&#xff1b;通过web界面快速购买。缺点&#xff1a;安全性低&#xff1b;使用资源是与其他用户共享。&#xff09; 私有云&#xff1…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天&#xff0c;随着上云业务的用户数量越来越多、数据中心的规模…

umi项目配置之项目构建时配置umirc.ts

对于 umi 中能使用的自定义配置&#xff0c;你可以使用项目根目录的 .umirc.ts 文件或者 config/config.ts&#xff0c;值得注意的是这两个文件功能一致&#xff0c;仅仅是存在目录不同&#xff0c;2 选 1 &#xff0c;.umirc.ts 文件优先级较高 umi 的配置文件是一个正常的 n…

【vivado】 IBERT GT收发器误码率测试

一、前言 IBERT(Integrated Bit Error Ratio Tester),集成误码率测试仪。作为用户来说可以使用这个工具对自己设计的板子中的高速串行收发器进行简单测试&#xff0c;从而判断设计的接口是否有问题。因为这个工具是直接集成到FPGA上&#xff0c;这样一来直接使用这个工具来测试…

ubuntu下安装wireshark

1、安装wireshark 打开终端&#xff0c;输入安装命令 sudo apt-get install wireshark 2、启动 输入命令回车&#xff0c;一定要加上sudo sudo wireshark 3、看到有很多UDP、ARP、ICMP协议等的网络报文 4、以太网口抓取到的报文&#xff0c;列表属性分别为&#xff1a; 编号| 时…

STL----push,insert,empalce

push_back和emplace_back的区别 #include <iostream> #include <vector>using namespace std; class testDemo { public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cou…

数据分析——对比思维、A/B test

对比分析 数据大小 &#xff1a;与中值、平均值、目标值、标准做对比数据波动&#xff1a;变异系数、方差、标准差数据趋势&#xff1a;时间维度和空间维度 其中 时间维度 横向比较&#xff08;连续7天每天的销售量&#xff09; 纵向比较&#xff08;同一时期不同品类对比&…