当前位置: 首页 > 后端技术 > Python

SmoothPython阅读笔记---第2章序列构成的数组

时间:2023-03-26 18:23:52 Python

最近在看《SmoothPython》这本书,想把自己的阅读笔记分享给大家,希望对大家有帮助,我也有兴趣这本书但是对于那些没有时间看的人来说。(文中大部分文字和图片摘录自《SmoothPython》一书和python官网)章节概述:本章介绍Python中内置的序列类型。Python中无论何种数据结构,都有一组相同的操作:迭代、切片、排序、串联章节结构:序列的分类最常见的两种序列类型:列表和元组序列序列的切片串联的排序SequencesOtherSequences详解:Sequences的分类Mutability类别1容器序列,存储对象引用(可以存储不同类型的数据):list,tuple,collections.deque可变序列:list,bytearray,array.array,collections.deque,memoryview类2flatsequence,存储Value(连续的内存空间,比较紧凑,但只能存储字符、字节和数字等基本类型):str、bytes、bytearray、memoryvierw、array.array不可变序列:tuple、str、bytes这两个最常见的类型Sequence:列表(list)和元组(tuple)listcomprehensiongeneratorFilter&Map的缩写listcomprehension=listcompsgeneratorexpression=genexps目的是通过过滤或处理序列或其他可迭代类型中的元素来构造一个新列表创建任何形式的序列类型的快捷方式[exp(variable)forvariableinvariables](exp(variable)forvariableinvariables)list(filter(lambdavariable:expression(variable),map(expression,veriables)))注意尽可能短。它用于创建新列表。两行以上要考虑改写。可读性好,可读性好,遵循迭代器协议,一个一个输出元素,节省内存注意:listcomprehensionandpartialfunctionofgenerator表达式内部的字段,变量和赋值只能在局部起作用Tuples什么是元组?元组不仅仅是不可变的列表,还可以用于记录没有字段名的数据。其记录的元素=字段数据+字段位置如何提取元组中的元素?解包用法一:forelement_one,_inelements_tuple:print(....),其中_为无用元素的占位符用法二:提取元组数据=(val1,val2),可以直接x,y=data,printoutx=val1,y=val2用法三:arg获取不确定数量的元素,Ex.a,b,arg=(1,2,3,4,5)用法四:嵌套元组拆包,Ex.a,b,(c,d)=(1,2,(3,4))命名元组Namedtuple?可以创建字段名为元组的工厂函数tuple_A=collections.namedtuple("name_tuple_A",[name_column_1,name_column_2])列表和元组的方法和属性Slicing切片操作遵循包含第一个元素但不包含最后一个元素Slicing形式样式:s[startstep]切片背后的原理:s[startstep]=s.__getitem__(slice(start,stop,step))切片的特殊用法:多维切片:a[m:n,k:l]multidimensional省略:x[i,...]=i[i,:,:,:]序列的拼接&&+=&=序列的排序新建一个列表作为返回值关键字参数:reverse:如果相等为True,排序序列元素按降序输出,默认为Falsekey:只有一个参数的函数,作用于每个元素,结果为排序依据,默认为id排序sequencesearchbisectmodule:使用binary查找或插入有序序列中元素的搜索算法,主要功能是bisect&insort其他sequence序列和库使用数组(array.array)只包含数字,arraycompareslist高效内存视图(memoryview操作相同数据结构的不同分片不复制内容,共享内存双向队列(collections.deque)是线程安全的,可以快速的从数据类型queue((Queue,LifoQueue&PriorityQueue))两端添加或删除元素的同步类,供不同线程使用这些数据类typeexchangeinformationmultiprocessing(Queue)进程间通信asyncio((Queue,LifoQueue&PriorityQueue))异步编程中的任务管理heapq没有队列类,只提供heappush和heappop,允许用户使用可变序列作为堆队列或列表和数组的优先队列方法以及双向队列的方法