流畅的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 堆

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

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

相关文章

分布式架构|打造高效、稳定、灵活的现代IT基石

分布式架构:打造高效、稳定、灵活的现代IT基石 一、独立扩展:应对业务增长与用户激增二、高可用性:确保系统稳定运行三、可维护性:降低系统复杂性四、技术选型灵活性:充分利用各种技术优势五、数据隔离与安全性 随着信…

基于Springboot+Vue的Java项目-旅游网站系统开发实战(附演示视频+源码+LW)

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

IOS离线打包uniapp的信息时报错如下的解决方法

IOS离线打包uniapp的信息时报错如下的解决方法 问题描述: Extract app intents metadata 0.1 seconds XExtractAppIntentsMetadata(in target HBuilder from project HBuilder-Hello)cd /Users/whb/space/vpt/vptios/HBuilder-Hello/Applications/Xcode.app/Conte…

音视频开发3 视频基础,图片基础

图片像素(Pixel) 一张图片是由多少个 像素 构成的。 例如一张图片是由60x50组成的。 位深度 bit depth RGB表示法 红(Red)、绿(Green)、蓝(Blue) 除了24bit,常见的位深…

(41)5.6-5.7数据结构(栈和队列的应用)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…

寻找身高最相近的小朋友 - 华为OD统一考试(D卷)

OD统一考试(D卷) 分值: 100分 题解: Java / Python / C++ 题目描述 小明今年升学到小学一年级,来到新班级后发现其他小朋友们身高参差不齐,然后就想基于各小朋友和自己的身高差对他们进行排序,请帮他实现排序。 输入描述 第一行为正整数H和N,0<H<200,为小明的…

C++ | Leetcode C++题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() 1, vector<int>(word2.size() 1, 0));for (int i 0; i < word1.size(); i) dp[i][0] i;for (int j…

公钥私钥?一文搞懂非对称加密

非对称加密 非对称加密&#xff1a; 通信双方分别创建公钥和私钥&#xff0c;并且保证公钥所加密的信息&#xff0c;只有配对的私钥可以解密&#xff0c;接下来&#xff0c;双方公开交换公钥&#xff0c;通信时&#xff0c;使用对方的公钥进行加密&#xff0c;如此&#xff0…

基于51单片机无线恒温箱恒温控制系统

基于51单片机无线恒温箱恒温控制 &#xff08;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20温度传感器测温。 2.按键可以设定温度上下限及温度刷新时间间隔。 3.使用NRF24L01无线模块传输数据 4.温度…

flask网站开发计划

我想写一个flask开发网站的合集文章&#xff0c;该网站主要是采集网络上的文章&#xff08;不同站点&#xff0c;用Python识别出正文内容&#xff09;&#xff0c;然后做成长图形式&#xff0c;发布到flask站点&#xff0c;并提供“下载”按钮&#xff0c;点击下载按钮&#xf…

第3章 WebServer重构

3.1 重构原生Web服务框架 3.1.1 分析原生Web服务框架 在服务端代码的 ClientHandler 中&#xff0c;请求解析、处理请求、返回响应的代码混杂在一起&#xff0c;这样的设计会导致代码难以维护和理解。为了提高代码的可读性、可维护性和可扩展性&#xff0c;我们需要对这些代码…

快速掌握Redis优化要点,告别性能瓶颈!

大家好!我是小米,今天和大家分享一下在Redis中如何进行优化,以提升系统性能。Redis作为一种流行的内存数据库,因其高性能、高可用和数据持久性而受到广泛应用。然而,在实际应用中,我们仍需对Redis进行优化,以满足各种业务需求。接下来,我将从读写方式、KV size、Key数量…

VALSE 2024主旨报告内容解析:以深度学习框架为牵引促进自主AI生态发展

2024年视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道&#xff0c;方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

探秘Flex布局下子元素宽度超出的那些烦心事

嘿&#xff0c;小伙伴们&#xff01;你们有没有遇到过用Flex布局的时候&#xff0c;子元素的宽度莫名其妙地超出了父元素的情况&#xff1f;别着急&#xff0c;今天我就来给大家揭秘这个问题的来龙去脉&#xff0c;以及一些解决方案。让我们一起来深入探讨&#xff01; 发现问…

【Gaea+UE5】创建基本的大型世界场景

目录 效果 步骤 一、在Gaea中生成地形 二、确定导出的地形规模 三、在UE中创建地形 四、验证UE创建的地形规模是否正确 五、使用M4自动地形材质 效果 步骤 一、在Gaea中生成地形 1. 打开Gaea官网下载软件 2. 打开Gaea软件&#xff0c;我们可以选择一个预设的山体 创…

Git === Git概述 Git安装

第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…

汇凯金业:通货膨胀对能源行业有何影响

通货膨胀对能源行业有几方面的影响&#xff0c;具体取决于通货膨胀的原因、规模以及持续时间。以下是一些可能的效应&#xff1a; 成本增加&#xff1a;通货膨胀导致能源行业的运营成本上升。这包括原材料、设备、维护和人力成本。如果企业不能完全将成本转嫁给消费者&#xf…

Pytorch入门实战 P09-YOLOv5里面的Backbone模块搭建网络

目录 1、YOLOv5的模型图。 2、BackBone简单介绍。 3、YOLOv5的Backbone文件。 4、YOLOv5Backbone的code部分 5、完整的code部分 6、结果展示 &#xff08;1&#xff09;Adam优化器 &#xff08;2&#xff09;SGD优化器 &#x1f368; 本文为&#x1f517;365天深度学习…

linux系统下产生Segmentation fault 与 Segmentation fault (core dumped)!!!

最近在学习的过程中&#xff0c;遇到了Segment fault&#xff08;段错误&#xff09;的问题&#xff0c;经过一番查找资料&#xff0c;学到了一些相关知识&#xff0c;这里做一个梳理&#xff0c;以防以后在遇到类似的问题&#xff0c;并且希望能够帮助到大家一丝丝&#xff01…

华为AI全栈生态布局:中国科技巨头加速创新

华为AI芯片生态全栈深度分析 2024 一、引言 1.1 华为AI芯片发展背景&#xff1a; 华为&#xff0c;通信和消费电子巨头&#xff0c;以其技术创新和远见著称。2013年&#xff0c;华为率先布局人工智能&#xff08;AI&#xff09;&#xff0c;并专注于全栈AI解决方案的开发。华…