这是一个关于学习《Fluent Python》这本书第二章的学习笔记
内置序列类型
容器序列
list
、tuple
和collection.deque
扁平序列
str
、bytes
、bytearray
、memoryview
和array.array
可变序列
list
、bytearray
、array.array
、collection.deque
和memoryview
不可变序列
tuple
、str
和bytes
- 注意:不要在元组里放入列表
列表推导和生成器表达式
列表推导(listcomps)
例子:1
2beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
tshirts = [(color, size) for size in sizes for color in colors]
用于创建新的列表,保持简短。使用技巧:
- 可以加入判断
- 多个循环先运行从最后开始运行
生成器表达式(genexps)
例子:1
array.array('I', (ord(s) for s in symbols))
生成器可以逐个产生元素,节省内存。使用技巧跟列表推导差不多,只是[]换成()
具名元组(collections.namedtuple)
例子:1
City = namedtuple('City', 'name country population coordinates')
用于快速创建只有属性的类,记录数据
具名元组需要2个参数:
- 类名
- 类各字段名:是可迭代对象或有空格分隔的字符串
切片
忽略最后一个元素的好处
- 快速看出切片和区间的元素个数
- 快速看出切片和区间的长度
- 把序列分隔成不重叠的两部分
多维切片和省略
省略号(…)三个英文句号。使用:如果x是四维数组,x[i,…]相当于x[i,:,:,:]
给切片赋值
例子:1
2
3
4
5
6l = list(range(10))
l
[0,1,2,3,4,5,6,7,8,9]
l[2:5] = [20,30]
l
[0,1,20,30,5,6,7,8,9]
重点:
- 没给出的元素相当于删除
- 赋值一定是一个可迭代对象