本章讨论list,str,bytes ,列表元组数组和队列相关话题。
首先翻到最后看一下本站小结:要想写出准确、高效和地方的python代码,对标准库里的序列类型的掌握是不可或缺的。
嗯,这章的掌握不可或缺,那么干净总结一波。
1.内置序列类型概述
(1)不可变序列:tuple str bytes
(2)可变序列:list、bytearray、array.array、collections.deque、memoryview
(3)容器序列(可存放不同类型的数据):
list、tuple、collections.deque
(4)扁平序列(只能存放相同类型的数据):
str、bytes、array.array、bytearray、memoryview
2.列表推导和生成器表达式(熟练掌握)
(1)列表推导式:tshirts = [(color,size)for color in colors for size in siezes]
tshirts = [(color,size)for size in siezes
for color in colors]
以上两种相同
(2)生成器表达式 则是把[]换成()即可,返回是generator 对象 可以用next()方法来控制
两者区别:列表推导式占用内存大,会把所有数据存到内存里;生成器则是调用多少执行多少。内存开销小
3.元组
不可变列表,
(1)元组拆包
可以用*t(传递可迭代对象)和_(占位符)来辅助拆包
(2)nametuple 具名元组
nametuple(类名,各个字段名),其中第二个参数可以用可迭代对象或者空格隔开字段名组成的字符串构成
nametuple中最有用的方法_fields类属性,_make类方法,_asdict()实例方法
_fields类属性:是月hi个包含这个类所有字段名称的元组。
_make():通过接收一个可迭代对象来生成这个类的一个实例,它的作用和A(*detial_data)一样
_asdict():把具名元组以collections.OrderedDict的形式返回,我们可以利用它来把元组里面的信息呈现出来
(3)切片
s[a:b:c]
eg:
l = list(range(10)) # l =[0,1,2,3,4,5,6,7,8,9]
l[3::2] = [11,22] # l = [0,1,2,11,4,223,6,7,8,9]
如果一个复制的赋值的对象是一个切片,那么赋值语句的右侧必须是一个可迭代对象。即便只有单独的有一个值,也要把它转 换成可迭代的序列。
4.序列的增量赋值
+= 是__iadd__方法用于 就地加法
同理*=__imul__
5.list.sorted 和Sorted()区别
list.sort() 没有返回值,所以缺点是无法做函数式编程(没办法串起来)
Soted()会返回一个新的列表
相同点:都有两个参数revere,key
6.bisect 可以管理已排序的序列
pass
7. 双向队列和其他形式的队列
collections.deque是一个线程安全的双向队列
熟悉其api