流畅的python-学习笔记_数据结构

概念

抽象基类:ABC, Abstract Base Class

序列

内置序列类型

分类

可分为容器类型扁平类型

容器类型有list, tuple, collections.deque等,存储元素类型可不同,存储的元素也是内容的引用而非内容实际占用内存

扁平类型有str, bytes, array.array, bytearray, memoryview等,

按结构是否可变也可分为可变类型不可变类型

可变序列有list, bytearray, array.array, collections.deque, memoryview

不可变序列有tuple, str, bytes

可变类型与不可变类型元类

可变序列继承了不可变序列并为可变实现了方法

列表推导和生成器表达式

列表推导

列表推导即为将for循环用一行代码代替,起到简化作用,比如x = [i for i in range(5)]。但如果列表推导过长也可以写为for循环,怎么选取决于自己

列表推导在python2存在变量泄漏,但在python3不存在。因为py3里列表推导里元素空间为局部变量,不会影响到外部的同名变量值

列表推导的功能,用filter和map内置函数也可实现,只是可读性不同

生成器表达式

吧方括号换成圆括号,好处是节省内存,不会直接生成结果,而是用的时候才生成,只生成一次,第二次就没了

元组

元组拆包

不光可以在赋值时拆包,也可在print等场景使用:a =  (1, 2, 3); print('%s/ %s, %s' % a)

*可以拆包或赋值,赋值的结果类型是list。*后跟的变量可在任意位置

具名元组

即collections.namedtuple

构造函数参数可以是可迭代对象

对具名元组类的._fields方法可看有哪些定义的属性

具名元组类可用._make方法入参,创一个实例

具名元组实例的._asdict可转为collections.OrderedDict

切片

对象进行切片访问时,实际会调用对象的__getitem__方法:obj[a: b: c] == obj.__getitem__(slice(a, b, c))

多维切片

py内置类型切片都是一维的,numpy.ndarray实现了多维的支持,形如obj[a:b, c:d]即可实现多维切片访问。

若希望实现多维切片,也需实现__getitem__和__setitem__方法

多维切片可用...实现对剩余维度访问。比如obj[1d, 2d, ...]。...实际是Ellipsis对象的别名,Ellipsis对象是ellipsis类的单一实例(命名大小写反了,就是这么写的,比如bool True False)

序列使用+和*

序列可使用+和*创建全新序列

需注意如果用+和*对已有序列操作,如果是可变序列可能会有副作用,不推荐

序列增量赋值

+=实际调用__iadd__方法,如果没实现__iadd__方法,解释器会调__add__方法

可变序列会实现这个方法,不可变序列没有这个方法

增量赋值不是一个原始操作,因为即使发生异常,操作也可能完成执行,比如+=

可用python tutor辅助查看python内存分配

list.sort和sorted内置函数

list.sort不返回,原地排序;sorted不原地排序,而是返回一个排序好的序列

bisect

可用来二分法查找已排序序列元素

bisect.bisect为bisect.bisect_right,还有一个函数bisect.bisect_left。调用方法:bisect.bisect(target_queue, target_value),方法会返回要插入的值在有序序列里插入的下标,right和left即规定插入目标元素的左边还是右边

bisect插入元素:用bisect.insort方法。调用:bisect.insort(queue, target_value)。插入后方法会保持序列升序。

相比于bisect.bisect,bisect.insort可以一步到位,该方法还可节省一点时间

列表以外的数据类型

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

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

相关文章

.排序总讲.

在这里赘叙一下我对y总前四节所讲排序的分治思想以及递归的深度理解。 就以788.逆序对 这一题来讲(我认为这一题对于分治和递归的思想体现的淋淋尽致)。 题目: 给定一个长度为 n𝑛 的整数数列,请你计算数列中的逆序对…

易语言IDE界面美化支持库

易语言IDE界面美化支持库 下载下来可以看到,是一个压缩包。 那么,怎么安装到易语言中呢? 解压之后,得到这两个文件。 直接将clr和lib丢到易语言安装目录中,这样子就安装完成了。 打开易语言,在支持库配置…

C#-快速剖析文件和流,并使用(持续更新)

目录 一、概述 二、文件系统 1、检查驱动器信息 2、Path 3、文件和文件夹 三、流 1、FileStream 2、StreamWriter与StreamReader 3、BinaryWriter与BinaryReader 一、概述 文件,具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合; …

【系统架构师】-选择题(十三)

1、在某企业的营销管理系统设计阶段,属性"员工"在考勤管理子系统中被称为"员工",而在档案管理子系统中被称为"职工",这类冲突称为( 命名冲突)。 同一个实体在同系统中存在不同的命名&am…

【4087】基于小程序实现的电影票订票小程序软件

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:ssm 【…

局部性原理和磁盘预读

局部性原理 磁盘预读 \

Linux 基础命令、性能监控

一、Linux 基础命令 grep:在文件中执行关键词搜索,并显示匹配的结果。 -c 仅显示找到的行数 -i 忽略大小写 -n 显示行号 -v 反向选择: 仅列出没有关键词的行 (invert) -r 递归搜索文件目录 -C n 打印匹配行的前后 n 行grep login user.cpp # 在…

编译官方原版的openwrt并加入第三方软件包

最近又重新编译了最新的官方原版openwrt-2305(2024.3.22),此处记录一下以待日后参考。 目录 1.源码下载 1.1 通过官网直接下载 1.2 映射github加速下载 1.2.1 使用github账号fork源码 1.2.2 创建gitee账号映射github openwrt 2.编译准…

cordova build android 下载gradle太慢

一、 在使用cordova run android / cordova build android 的时候 gradle在线下载 对于国内的链接地址下载太慢。 等待了很长时间之后还会报错。 默认第一次编译在线下载 gradle-7.6.1-all.zip 然后解压缩到 C:\Users\Administrator\.gradle 文件夹中,下载慢导致失败。 二…

(论文阅读-优化器)A Cost Model for SPARK SQL

目录 Abstract 1 Introduction 2 Related Work 3 Background and Spark Basics 4 Cost Model Basic Bricks 4.1 Cluster Abastraction and Cost Model Parameters 4.2 Read 4.3 Write 4.4 Shuffle Read 4.5 Broadcast 5 Modeling GPSJ Queries 5.1 Statistics and S…

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注:部分内容参考自GPT生成的内容 论文笔记:Order Matters(AAAI 20) 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

Spring Boot 整合 socket 实现简单聊天

来看一下实现的界面效果 pom.xml的maven依赖 <!-- 引入 socket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- 引入 Fastjson &#x…

【CV-CUDA实战】使用Python+TensorRT+CVCUDA优化YOLOv8

目录 什么是CV-CUDA环境准备准备CV-CUDA静态库解压添加至变量将PyBind静态库复制到env下算子设计前处理算子 TensorRT模型加载后处理函数 完整代码输出演示为什么重新写了&#xff1f;结语 什么是CV-CUDA NVIDIA CV-CUDA™ 是一个开源项目&#xff0c;用于构建云规模人工智能 (…

【数据结构(邓俊辉)学习笔记】列表02——无序列表

文章目录 0.概述1.插入与构造1.1 插入1.1.1 前插入1.1.2后插入1.1.3 复杂度 1.2 基于复制构造1.2.1 copyNodes()1.2.2 基于复制构造1.2.3 复杂度 2.删除与析构2.1 删除2.1.1 实现2.1.2 复杂度 2.2 析构2.2.1 释放资源及清除节点2.2.2 复杂度 3.查找3.1 实现3.2 复杂度 4.唯一化…

每天五分钟深度学习:数学中常见函数中的导数

本文重点 导数是微积分学中的一个核心概念,它描述了函数在某一点附近的变化率。在物理学、工程学、经济学等众多领域中,导数都发挥着极其重要的作用。本文旨在详细介绍数学中常见函数的导数,以期为读者提供一个全面而深入的理解。 数学中常见的导数 常数函数的导数 对于常数…

Raft共识算法笔记,MIT6.824,

处理leader和follow的一个重要思路是多数投票&#xff0c;确保系统中存在奇数个服务器&#xff08;例如3台&#xff09;。进行任何操作都需要来自多数服务器的同意&#xff0c;例如3台服务器中的2台。如果没有多数同意&#xff0c;系统会等待。为什么多数投票有助于避免脑裂问题…

springboot项目 字典/枚举翻译 终极解决方案 AOP+自定义注解+递归实体字段+实体动态三级缓存+责任链+多种转换方式

目录 前言实现思路技术确定 食用方式效果使用样例项目中使用第一步 复制包第二步 实现LoadDictDatabase并将其注入容器第三步 标识需要翻译的字段第四步 标识需要翻译的方法第五步 调用需要翻译的方法 实现细节TODO 前言 字典,即在存储介质中进行存储时,为了避免业务上对其名称…

计数排序,基数排序,桶排序

目录 计数排序: 基数排序&#xff1a; 桶排序: 计数排序: 计数排序是一种非比较型整数排序算法&#xff0c;特别适用于一定范围内的整数排序。它的核心思想是使用一个额外的数组&#xff08;称为计数数组&#xff09;来计算每个值的出现次数&#xff0c;然后根据这些计数信…

[贪心] 区间选点问题

905. 区间选点 - AcWing题库 思路&#xff1a;就是将所有区间按照右端点排序&#xff0c; 然后选取一些区间的右端点 代码&#xff1a; #include <iostream> #include <algorithm> #include <vector> using namespace std; const int N 100010;typedef p…

Flask与HTTP

一、请求响应循环 “请求-响应循环”&#xff1a;客户端发出请求&#xff0c;服务器处理请求并返回响应。 Flask Web程序的工作流程&#xff1a; 当用户访问一个URL&#xff0c;浏览器便生成对应的HTTP请求&#xff0c;经由互联网发送到对应的Web服务器。Web服务器接收请求&a…
最新文章