流畅的python-学习笔记_序列

概念

抽象基类:ABC, Abstract Base Class,ABC还有一个概念,是一个编程语言

序列

内置序列类型

分类

可分为容器类型扁平类型

容器类型有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可以一步到位,该方法还可节省一点时间

列表以外的数据类型

大量数据时可用array类型,和list相比优点是存储的对象不是对象,而是C语言字节表述,类似C语言的数组,存储有优化(好像没多少),而且array是扁平类型。数据量大且相同类型但希望像list操作,可以用内置类型array,也可用np的array(待验证)等类型

频繁增删元素时,deque更快点

频繁查找元素可用set,set类型对元素查找有优化

数组

array可二进制读写文件,读写速度快,比常规读写文件快5倍以上,且空间相比于文本文件小

pickle也可快速序列化,速度和array差不多,但支持序列化数据类型,array比pickle可能多,array几乎支持全部内置类型,自定义类没复杂实现也可支持

内存视图

memoryview是内置类。功能是不复制对象内存情况下支持切片等操作

memoryview.cast方法可将原对象打包成其他类型返回,是新对象,但新对象没有新分配内存,而是和原对象用一个内存,所以改新对象后原对象也会变,反之亦然

numpy和scipy

scipy基于numpy,专为线性代数,积分,统计学等方面计算设计。

时间打印,time.perf_counter更准确,验证一下

双端队列和其他队列

对列表来说,如果元素很多,删第一个元素会很耗时,此时可使用队列collections.deque(线程安全),deque也可限制队列长度,超过长度时会删除过期元素

还有几个内置库提供队列类

queue 线程安全

multiprocessing 进程间通信使用

heapq 堆

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

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

相关文章

实验九 Java 语言网络通信程序设计练习(课内实验)

一、实验目的 本次实验的主要目的是练习网络通信程序的设计方法,并掌握计算机网络基 础知识、Java语言网络通信程序类库的结构和使用方法。 二、实验要求 1. 认真阅读实验内容,完成实验内容所设的题目。 2. 能够应用多种编辑环境编写Java语言源程序…

南京观海微电子---电源,从微观角度观看电功率是怎么产生

从微观角度看看无功功率是怎么产生的,在此之前,我们得先知道引起无功功率的元器件是储能器件,主要是电感和电容。 首先,在宏观上,我们知道电感能导致电压超前电流90,可从如下公式推出: 由此可以…

强到离谱!AI绘画Stable Diffusion让商业换装如此简单!AI一键换装,AI绘画教程

今天给大家介绍一款可以让 Stable Diffusion 轻松实现AI一键换装的超强插件—— Inpaint Anything ,它能精准地替换图片中的指定部位,不仅上手简单,而且简直强到离谱! 首先,我们要下载这个插件。插件可看文末扫描获取…

【ARM Cortex-M3指南】7:嵌套向量中断控制器和中断控制

文章目录 七、嵌套向量中断控制器和中断控制7.1 嵌套向量中断控制器概述7.2 基本的中断配置7.2.1 中断使能和清除使能7.2.2 中断设置挂起和清除挂起7.2.3 优先级7.2.4 活跃状态7.2.5 PRIMASK和FAULTMASK特殊寄存器7.2.6 BASEPRI特殊寄存器7.2.7 其他异常的配置寄存器 7.3 设置中…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref:6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档 (gluon.ai)

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

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

一分钱不花从HTTP升级到HTTPS

HTTP升级到HTTPS是一个涉及安全性和技术实施的过程,主要目的是为了提升网站数据传输的安全性,防止数据被窃取或篡改。以下是一些关于从HTTP升级到HTTPS的技术性要点和步骤概述,结合上述信息资源: 一、理解HTTPS的重要性 HTTPS (…

IDEA--debug

1. 单点调试的三个级别 Step into:在单步执行时,遇到子函数就进入并且继续单步执行。Step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数…

[图解]SysML和EA建模住宅安全系统-01

1 00:00:00,980 --> 00:00:03,100 接下来,我们来看一下案例 2 00:00:04,930 --> 00:00:06,750 我们这次课程的案例 3 00:00:07,090 --> 00:00:13,800 选用了SysML实用指南的书上 4 00:00:13,810 --> 00:00:16,180 第十七章这个案例 5 00:00:16,350 …

Lib city笔记:TrajectoryDataset

1 AbstractDataset 抽象类,所有数据集的基类 2 TrajectoryDataset 2.1 __init__ 2.2 get_data 2.3 cutter_filter 2.3.1 按照时间间隔切割 2.3.2 按照同一天切割 2.3.3 按照固定窗口长度切割 2.4 get_encoder 2.5 encode_traj 2.6 divid_data 把数据集划分成训练…

DBCHM 数据库 CHM 文档生成工具

介绍 DBCHM 是一款数据库文档生成工具! 该工具从最初支持chm文档格式开始,通过开源,集思广益,不断改进,又陆续支持word、excel、pdf、html、xml、markdown等文档格式的导出。 支持的数据库 SqlServerMySQLOraclePos…

最佳WordPress外贸主题推荐(2024)

WordPress是一个非常受欢迎的建站平台,它具有易用性,并提供了许多功能强大的主题和插件。如果你计划建立一个外贸独立站商城,选择一个适合的WordPress外贸主题至关重要。以下是一些外贸主题应具备的特点: 1. 欧美风格&#xff1a…

Higgins指数-企业可持续发展指数数据集(1990-2022年)

01、数据介绍 Higgins指数是一个企业可持续发展指数,旨在评估企业的环境和社会责任表现。该指数由可持续服装联盟(SAC)推出,是一个行业性的工具,旨在帮助服装和鞋类企业评估其产品和生产过程对环境和社会的影响。 本…

LabVIEW鸡蛋品质智能分级系统

LabVIEW鸡蛋品质智能分级系统 随着现代农业技术的飞速发展,精确、高效的农产品质量控制已成为行业的重要需求。其中,鸡蛋作为日常膳食中不可或缺的重要组成部分,其品质直接关系到消费者的健康与满意度。本文设计并实现了一套基于LabVIEW的鸡…

CMakeLists.txt语法规则:提供信息的变量说明一

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。 接下来学习CMakeLists.txt语法中部分常用变量,变量也是 cmake 中的一个重头戏,cmake 提供了很多内置变量。每一个变量都有它自己的含义,可以通过如下链接地址查询到所有…

危险!48篇问题文章曝光!这本Frontiers“水刊”3年扩刊26倍!

据最新统计,FRONTIERS IN SURGERY以48篇质疑文章领跑质疑榜。FRONTIERS IN SURGERY创刊于2014年,是一本开源期刊,主要发表有关外科实践的进展和研究成果。该期刊的各方面数据怎么样呢?接下来,小编就带着大家来解析一下…

Photoshop前言

Photoshop前言 分辨率图像格式工具界面组件 分辨率 分辨率是指单位长度内包含的像素点的数量,其单位通常为像素/英寸(ppi),300ppi表示每英寸包含300个像素点。对于1英寸1英寸大小的图像,若分辨率为72ppi,则…

udp/tcp回显网络编程

udp DatagramSocket 用于接收和发送udp数据报 构造方法: DatagramSocket():创建一个UDP数据报套接字的Socket,绑定到本地上 一个随机可用端口上,一般用于客户端DatagramSocket(int port):创建一个UDP数据报套接字的Socket,绑定到…

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境: 秋叶安装包,安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包,直接解压包到comfyui根目录/custom_nodes/,重启后,按指导文件操作。 注意:网盘指导包中有配置好的流程json文件&#xff0…

Python爬虫:XPath解析爬取豆瓣电影Top250示例

一、示例的函数说明: 函数processing():用于处理字符串中的空白字符,并拼接字符串。 主函数程序入口:每页显示25部影片,实现循环,共10页。通过format方法替换切换的页码的url地址。然后调用实现爬虫程序的…