2.1内置序列类型概览
容器序列:存放不同类型的数据
- list
- tuple
- collections.deque
容器序列存放他们所包含的任意对象的引用。
扁平序列:只能容纳一种类型
- str
- bytes
- bytearray
- memoryview
- array.array
扁平序列里存放的是值而不是引用。
可变序列
- list
- bytearray
- array.array
- collections.deque
- memoryview
不可变序列
- tuple
- str
- bytes
2.2列表推导和表达器生成式
列表推导(略去)
生成器表达式
与列表推倒式不同的是,生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,而不是先建立一个列表,然后再把这个列表传递到某个构造函数里。这样能节省内存。
生成器表达式的语法与列表推导差不多,只不过方括号换成圆括号而已。
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ('%s, %s' % (c, s) for c in colors for s in sizes):
print(tshirt)
生成器逐个产出元素,从来不会一次性产出一个含有6个T恤样式的列表。
2.3元组不仅仅是不可变的列表
元组当做一些元素的集合,那么数量和位置信息就变得非常重要了。
元组拆包
- 平行赋值
- *运算符把一个可迭代对象拆开作为函数的参数
t = (20, 8)
quotient, remainder = divmod(*t) #(2, 4)
- 用*来处理剩下的元素
嵌套元组拆包
具名元组
collections.namedtuple
是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类。
网友评论