流畅的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://xiahunao.cn/news/3016057.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

8W 1.5KVDC 隔离宽电压输入 DC/DC 电源模块——TP08DA 系列

TP08DA系列电源模块额定输出功率为8W,外形尺寸为31.80*20.30*10.00,应用于2:1,4:1电压输入范围 9-18V,18-36V,36-72V9V-36V和18V-72VDC的输入电压环境,输出电压精度可达1%,具有输出短路保护等功能&#xff…

pynq7020系列的资源有多少

pynq系列的资源有多少 对比 查找表107,273 39.14 140,537 51.28查找表随机存储器17,457 12.12 19,524 13.56触发器67,278 12.27 81,453 14.95 Block RAMs ( 36 KB ) 264.5 29.00 457 50.11 Table 1: Zynq-…

甲小姐对话柳钢:CEO对股东最大的责任,是对成功的概率负责|甲子光年

只有看见最微小的事物,才能洞悉伟大的定律。 来源|甲子光年 作者|甲小姐 刘杨楠 编辑|栗子 商业史上,职业经理人成为“空降CEO”的故事往往胜少败多。 “究其原因有三条——容易自嗨、喊口号;不顾公司历…

【start和run的区别(面试题)及创建线程的五种写法】

线程 1.start和run的区别2.创建线程的五种写法1.继承Thread,重写run2.实现runnable,重写run3.继承Thread,重写run,使用匿名内部类4.实现Runnable,重写run,使用匿名内部类5.使用lambda表达式 1.start和run的区别 1.start方法内部,是会调用到系统api&…

微搭低代码入门06分页查询

目录 1 创建自定义代码2 编写分页代码3 创建页面4 创建变量5 配置数据列表总结 我们在数据模型章节介绍了微搭后端服务编写的三种方式,包括Http请求、自定义代码、云函数。本篇我们详细讲解一下利用自定义代码开发分页查询的功能。 1 创建自定义代码 打开控制台&am…

选择了软件测试,你后悔吗?

记得在求职的时候,面试官经常问我:“为什么要选择软件测试工作?”而我也会经常说一堆自己有的没的优势去应付。 工作这么久了,也不再浮躁,静下心来回忆当初选择软件测试工作的历程,也是对自己职业生涯的一次回顾。 下…

【影片欣赏】【指环王】【魔戒:护戒使者 The Lord of the Rings: The Fellowship of the Ring】

2001年发行,Extended DVD Edition Part One 1. Prologue: One Ring to Rule Them All… 2. Concerning Hobbits 3. The Shire 4. Very Old Friends 5. A Long-expected Party 6. Farewell Dear Bilbo 7. Keep It Secret, Keep It Safe 8. The Account of Isildur 9…

路飞吃桃递归问题

在写代码之前,补充两个知识点 1.C语言递归的模版 2.递归是怎么工作的 好!话不多说让我们开始吧: 我们知道路飞吃了n天,每次都是吃一半+1,知道最后一天,只有一个桃子了,所以就可以列出式子&…

CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前

机缘 Hello,大家好,我是景天,其实很早之前我就加入到了CSND的大军,彼时我还是个刚毕业的小白白,时常过来CSND汲取养料,就这样,慢慢的来提升自己,强大自己。工作锻炼了我&#xff0c…

layui 数据表格 自动定位新增行位置

由于数据表格新增行后没有到新增到当前位置 继续增加的需求: 因为自己是新增行后到最后一行的 所以 就定位到最后一行 并且 高亮 高亮颜色浅 可自行更改 整理了一下 可根据 情况 修改 // 初始化滚动条位置变量 let tableScroll {scrollTob: 0,scrollLeft: 0,…

五一小长假,景区智慧公厕发挥了那些作用?

五一小长假已经过去,在旅途中相信大家非常开心,其中也不乏一些细节让你有了更好的体验,而在您享受美景、畅游风光的同时,或许并未留意到那个角落里,默默为您服务的智慧公厕。是的,它们将成为您旅途中不可或…

Deeplab的复现(pytorch实现)

DeepLab复现的pytorch实现 本文复现的主要是deeplabv3。使用的数据集和之前发的文章FCN一样,没有了解的可以移步到之前发的文章中去查看一下。 1.该模型的主要结构 对于代码部分,主要只写了模型部分的,其他部分内容基本和FCN的一致&#xf…

计算有效声压

计算有效声压 clear all; %%----------------------------------------------读取文件------------------------------------------ % 从wav文件读入语音数据,该语音采样率16k,故信号最高频率8k。 [x,fs]audioread(C2_3_y.wav); % 取x的一个通道 xx(:,1)…

初始Linux(基础命令)

前言: 我们不能总沉浸在编程语言中,虽然代码能力提升了,但是也只是开胃小菜。我们要朝着更高的方向发展。 最近小编一直在刷力扣,以至于博客更新的比较少。今天就带各位开始学习全新的知识——Linux.至于为啥要学? Lin…

Python扩展模块的开发

有关python C扩展开发的教程可以参考概述 — Python 3.12.3 文档。项目已经发布至python官方的pypi里了。具体详情请见AdroitFisherman PyPI。目前该项目还处在测试阶段。尚有部分模块需要开发和测试。 项目结构 项目结构见下图: 代码展示与说明 以单链表(SingleL…

我独自升级崛起一键下载 我独自升级崛起一键下载安装教程

将于5月8日向全球绽放的《我独自升级:崛起》,标志着动作角色扮演类游戏的新纪元。它深挖同名动漫与网络漫画的丰富底蕴,誓言以无尽的魅力引导玩家涉足一个深广莫测、波澜壮阔的奇幻领域。该游戏巧妙地植根于一个前所未有的赛博武侠天地间&…

套管外径测量仪 多尺寸型号 规格全可定制

套管(bushing)是一种将带电导体引入电气设备或穿过墙壁的一种绝缘装置。前者称为电器套管,后者称为穿墙套管。套管通常用在建筑地下室,是用来保护管道或者方便管道安装的铁圈。套管的分类有刚性套管、柔性防水套管、钢管套管及铁皮…

智慧公厕:数据驱动的新时代公共厕所管理

公共厕所是城市的重要基础设施,直接关系到人民群众的生活质量和城市形象。然而,长期以来,公共厕所的管理问题一直困扰着城市管理者。为了解决这个难题,智慧公厕应运而生。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#…

我独自升级崛起怎么下载 我独自升级崛起下载教程来了

《我独自升级:崛起》作为一款炙手可热的游戏,其非凡的品质迅速聚拢了大量玩家的目光,就如同磁铁吸引铁屑一般,展现了优质游戏所固有的强大吸引力。在这款游戏中,每位玩家都能化身成为拥有超凡能力的英雄,体…

解析Linux键盘组合键产生信号的完整过程:从硬件中断到信号发送

前言 每一个了解Linux的都知道这样一个知识,CtrlC组合键能够终止一个进程。 个人了解进程相关知识之后知道,一个进程被终止只会有有三种情况: 代码运行完毕,结果正确代码运行完毕,结果不正确代码运行异常&#xff…