流畅的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类是一个线程安全可以快速从两端添加或者删除元素的数据类型。

列表和双向队列的方法

原文地址:https://www.cnblogs.com/lgh344902118/p/8340798.html

时间: 2024-10-12 20:34:24

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

第二章 序列构成的数组

2.1内置序列类型概览 Python标准库用C实现了丰富的序列模型,列举如下: 1>    序列模型 list.tuple和collection.deque这些序列能存放不同类型的序列 2>    扁平模型 str.bytes.bytearray.memoryview和array.array这类序列只能存放一种类型 容器序列存放的是它们所包含任意类型对象的引用,而扁平序列存放的是值而不是引用. 序列类型还能按照能否被修改来分类: 1>    可变序列    list  bytearray

machine learn in python 第二章2.1.1

1关于 sklearn.datasets from sklearn.datasets import load_iris import numpy as np data = load_iris() data 的属性如下: 数据存储在.data项中 每个观察对象的种类存储在数据集的.target属性中 数据的特征的种类存储在数据集的.feature_names属性中. 2关于遍历问题 a:遍历不取item的序号i for item in sequence: process(item) b: for 

[Head First Python] - 第二章 python of comment

1- 多行注释 ''' ''' 或 """ """ '''this is the standard way to include a multiple-line comment in you code''' """this is the standard way to include a multiple-line comment in you code""" 2- 单行注释 # # t

第二章 数学运算、数组、文字处理

第二章 数学运算.数组.文字处理.md 知识要点 数学运算 数组的使用 seq tr sort uniq cut 等命令 数学运算 整数运算 常用的运算符 加法运算符:+ 减法运算符:- 乘法运算符:/ 求模运算符:% 求幂运算符:** 常用整数运算 第一种 declare -i a=10*20; echo $a 少用 第二种 a=$(expr 10'*'20); echo $a 少用 第三种 a=$[10*2]; echo $a []中的变量无需加$ echo $[RANDOM%10] 求0-

python 第二章

第二章 while 循环 # while -- 关键字(死循环) # while 条件 冒号 # 缩进 循环体 # 停止while要点击红色停止,不能只关闭窗口 while True: print("痒") print("鸡你太美") print("卡路里") print("好运来") while False: print("痒") print("鸡你太美") print("卡

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

第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ? Thread是所在主机运行的应用程序任务(task). 仅仅有一个线程的样例: public class Factorial { public static void main(String[] args) { int n = 5; System.o

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

字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而不是修改现有的字符串. 字符串常量的表示 1. 3种表示 1 #单引号 2 A = 'Python' 3 #引号 4 B = "Python" 5 #三引号 6 C = """Python""" 2. 为什么要这么麻烦? (1)当

Python第二章

1. 下划线_代表最后一个表达式的值.注意:只在解释器中有用,既显示上一次的操作结果. 2. Print语句可以用%进行格式控制,与C相似. 如: >>> print “%s is number %d!” % (“python”, 1) Python is number 1! 3. Python 非常灵活,所以即使你将数字传递给 %s,也不会像其他要求严格的语言一样引发严重后果. 4. 符号 >> 用来重定向输出,下面这个例子将输出重定向到标准错误输出: import sys

python 第二章 列表,if循环

列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起