python内置序列类型概览

列表推导和生成器表达式

列表推导是构建列表的快捷方式,而生成器表达式可以用来创建其他任何类型的序列

列表推导的示例

>>>test = [i*2 for i in range(3)]
>>>test
[0,2,4]

使用列表推导通常的原则是,只能列表推导来创建新的列表,并且尽量保持简短。

python2中列表推导可能有变量泄露问题,而python3解决了变量泄露问题

列表推导和map/filter的对比

生成器表达式

虽然也可以用列表推导来初始化元组,数组或其他序列类型,但是生成器表达式是更好的选择。因为生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,而不是先建立一个完整的列表,然后在吧这个列表传递到某个构造函数里。更节省内存

使用生成器表达式初始化元组和数组

元组的使用

元组除了用作不可变的列表,还可以用于没有字段名的记录

元组和记录

元组其实是对数据的记录,元组的每个元组都存放了记录中的一个字段的数据,外加这个字段的位置。

元组拆包

元组拆包可以使用*开帮助我们把注意力集中在元组的部分元素上

元组拆包还可以应用在嵌套结构中

具名元组

collections.namedtuple是一个工厂函数。可以用来构建一个带字段名的元组和一个有名字的类

除了从普通元组集成来的属性外,具名元组还有一些自己专有的属性。_fields,_make,_asdict()

不可变列表的元组

除了增减元素相关的方法之外,元组支持列表的其他所有方法。

列表或元组的方法和属性

对象切片

s[a:b:c]对s在a和b之间以c为间隔取值,c可以为负,反向取值

多维切片和省略

切片赋值

对序列使用+和*

拼接的过程中,两个被操作的序列都不会被修改,python会新建一个包含同样类型数据的序列作为拼接的结果。

+和*都遵循这个规律,不修改原有的操作对象,而是构建一个全新的序列

序列的增量赋值

+=背后的特殊方法是__iadd__但是如果一个类没有实现该方法,python会调用__add__

*=背后的特殊方法是__imul__类似于+=

得到的教训

不要把可变对象放在元组里面

增量赋值不是一个原子操作

查看python字节码并不难,他对了解代码背后的运行机制很有帮助

list.sort方法和内置函数sorted

list.sort就地排序,对原列表进行排序并返回None。对原列表直接操作

sorted则不是,会创建新的列表,该列表是原列表进过排序的。

reverse参数,True降序排列,默认False

key参数用于对比的关键字

bisect管理已排序的序列

bisect模块包含两个主要函数,bisect,insort,两个函数都利用二分查找算法来在有序序列中查找或插入元素

bisect.insort(seq,item)将item插入seq中,并保持seq升序排序

数组

如果我们需要一个只包含数字的列表,那么array.array比list更高效,数组支持所有跟可变序列有关的操作。包括pop,insert和extend。另外,数组还提供从文件读取和存入文件的更快的方法frombytes和tofile

列表和数组的属性和方法

内存视图memoryview

scipy和numpy

双向队列和其他形式的队列

collections.deque类是一个线程安全可以快速从两端添加或者删除元素的数据类型。

列表和双向队列的方法

流畅的python第二章序列构成的数组学习记录的更多相关文章

  1. 流畅的python 读书笔记 第二章 序列构成的数组 列表推导

    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 2.2.1 列表推 ...

  2. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  3. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  4. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  5. Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  6. 【原创】Python第二章——字符串

    字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...

  7. 【原创】Python第二章——行与缩进

    Python的基本组成——逻辑行和缩进 a="我是一个物理行" a="""我是一个逻辑行 因为我一条语句便跨越了2个物理行""&q ...

  8. python第二章:数据类型--小白博客

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...

  9. python第二章:控制流

    变成实际上是一个过程的提现,每个过程都是有多个流程块组成. 比如:判断是否下雨的过程 1.布尔值 在第一章最后举例了比较操作后,最终返回的结果 True or False True 和 False是一 ...

随机推荐

  1. VS的使用

    配置一个工程 问题描述: 要运行一个源码工程,工程中含有层级目录,.cpp与.h在多级目录中混合存储.并且该工程的运行依赖一些静态库(.lib)与动态库(.dll). 建立: 把.h拷贝至$(Proj ...

  2. LeetCode Binary Tree PostorderTranversal

    Problem Description Given a binary tree, return the postorder traversal of its nodes' values. For ex ...

  3. MVC - 12.HtmlHelper

    1.动态生成URL @Url.Action("Index3","Stu3") @Url.RouteUrl("Default2", new { ...

  4. Lucene.Net无障碍学习和使用:索引篇

    一.简单认识索引 Lucene.Net的应用相对比较简单.一段时间以来,我最多只是在项目中写点代码,利用一下它的类库而已,对很多名词术语不是很清晰,甚至理解 可能还有偏差.从我过去的博客你也可以看出, ...

  5. Windows 上面优秀的工具软件推荐

    Windows 上面优秀的工具软件推荐 一.下载软件 1.速盘 - 度盘神器 简介: 使百度网盘保持全速下载免受限速困扰! 下载: speedpan 2.http下载工具 百度网盘破解下载器:prox ...

  6. Vue生命周期总结

    查看生命周期图 <!DOCTYPE html> <html> <head> <title></title> <meta http-eq ...

  7. 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系

    由9秒社团开发并维护的MarbleMap是支持Cocos2d-x坐标系和as3坐标系的地图编辑器,功能完善高效.这里详细介绍一下它的使用方法! 一.功能简述 由9秒社团开发并维护的MarbleMap是 ...

  8. web资料收集

    Web安全资料:https://github.com/CHYbeta/Web-Security-Learning http://blog.pentestbegins.com/2017/07/21/ha ...

  9. 洛谷P2224 [HNOI2001] 产品加工 [DP补完计划,背包]

    题目传送门 产品加工 题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时 ...

  10. CentOS7和CentOS6的主要区别

    了解一下就好 1.  文件系统的区别.CentOS6默认使用的是ext4的文件系统,而CentOS7使用的是xfs. 2.  硬盘默认调度算法不一样.CentOS6默认使用的是cfq,而CentOS7 ...