序列构成的数组

序列构成的数组

这是一个关于学习《Fluent Python》这本书第二章的学习笔记


内置序列类型

容器序列

listtuplecollection.deque

扁平序列

strbytesbytearraymemoryviewarray.array

可变序列

listbytearrayarray.arraycollection.dequememoryview

不可变序列

tuplestrbytes

  • 注意:不要在元组里放入列表

列表推导和生成器表达式

列表推导(listcomps)

例子:

1
2
beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
tshirts = [(color, size) for size in sizes for color in colors]

用于创建新的列表,保持简短。使用技巧:

  1. 可以加入判断
  2. 多个循环先运行从最后开始运行

生成器表达式(genexps)

例子:

1
array.array('I', (ord(s) for s in symbols))

生成器可以逐个产生元素,节省内存。使用技巧跟列表推导差不多,只是[]换成()


具名元组(collections.namedtuple)

例子:

1
City = namedtuple('City', 'name country population coordinates')

用于快速创建只有属性的类,记录数据
具名元组需要2个参数:

  1. 类名
  2. 类各字段名:是可迭代对象或有空格分隔的字符串

切片

忽略最后一个元素的好处

  1. 快速看出切片和区间的元素个数
  2. 快速看出切片和区间的长度
  3. 把序列分隔成不重叠的两部分

多维切片和省略

省略号(…)三个英文句号。使用:如果x是四维数组,x[i,…]相当于x[i,:,:,:]

给切片赋值

例子:

1
2
3
4
5
6
l = 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]

重点:

  1. 没给出的元素相当于删除
  2. 赋值一定是一个可迭代对象
0%