流畅的python第二章序列构成的数组学习记录
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第二章序列构成的数组学习记录的更多相关文章
- 流畅的python 读书笔记 第二章 序列构成的数组 列表推导
列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 2.2.1 列表推 ...
- 简学Python第二章__巧学数据结构文件操作
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- Python 第二章-列表和元组
第二章-列表和元组 2.0 在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
- 【原创】Python第二章——字符串
字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...
- 【原创】Python第二章——行与缩进
Python的基本组成——逻辑行和缩进 a="我是一个物理行" a="""我是一个逻辑行 因为我一条语句便跨越了2个物理行""&q ...
- python第二章:数据类型--小白博客
标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...
- python第二章:控制流
变成实际上是一个过程的提现,每个过程都是有多个流程块组成. 比如:判断是否下雨的过程 1.布尔值 在第一章最后举例了比较操作后,最终返回的结果 True or False True 和 False是一 ...
随机推荐
- Codeforces 877C Slava and tanks(思维)
题目链接:http://codeforces.com/problemset 题目大意:有n个格子,某些格子里可能有一个或多个坦克,但不知道具体位置,每个坦克被轰炸一次就会移动到相邻的格子里(第1个格子 ...
- WordPress匿名投稿插件:DX-Contribute(WP我要投稿,我要爆料)
倡萌在<WordPress添加投稿功能(无需注册/可邮件通知站长和投稿人) >中分享过,通过修改主题文件实现游客快捷投稿的功能,但是有部分同学就是不太会动手,那么今天就分享一个WordPr ...
- webpy 上传文件
x = web.input(myfile={})是一个类字典对象,会返回所有GET或POST的数据 括号内部用来设置myfile的默认值,以防请求中根本就没有myfile键 定义如下一个表单 form ...
- 搭建openstack系统初始化(2)
操作系统环境 :Centos 7.3 x64 1).安装需要的包 yum install wget vim chrony net-tools bash-completion -y 2)配置阿里elpl ...
- 【cocos2d-js教程】cocos2d-js 遮挡层(禁止触摸事件传递层)
在游戏中,我们经常会碰到一些弹窗,这些弹窗禁止点透,也就是禁止触摸事件传递到底层,我们称之为遮挡层,这些遮挡层,需要开发遮挡层,我们首先得了解cocos2d-js的触摸传递机制,本文主要针对cocos ...
- 【ASP.NET】必须知道的ASP.NET核心处理
该找工作了,回头复习一下基础知识,增加一下理论知识的理解,下面我们看一下今天要说的. ASP.NET应用程序对象 一.请求的处理参数:上下文对象HttpContext 当一个请求到达ASP.NET服务 ...
- 【转载】万能adapter
adapter总是自己写,其实使用现成的框架会节省不少代码 原文地址:https://github.com/hongyangAndroid/baseAdapter base-adapter Andro ...
- Express使用MongoDB常用操作
const MongoClient = require('mongodb').MongoClient const url = "mongodb://localhost:27017" ...
- 【BZOJ 1216】 1216: [HNOI2003]操作系统 (模拟+优先队列)
1216: [HNOI2003]操作系统 Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自 ...
- 初见Python<6>:文件读写
1.open函数语法: python通过open函数打开文件,建立程序与文件之间的连接. open函数语法:open(filename[,mode[,buffering]]) 其中filename是指 ...