概述
内置序列类型
容器序列
list、tuple和collections.deque这些序列可以存放不同类型的数据。存放的是它们所包含的任意类型的对象的引用。
扁平序列
str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型。存放的是值而不是引用,扁平序列其实是一段连续的内存空间,所以它更加紧凑,但它里面只能存放诸如字符、字节和数值这种基础类型。
可变序列
list、bytearray、array.array、collections.deque和memoryview。
不可变序列
tuple、str和bytes
MutableSequence是可变序列,Sequence是不可变序列,从图中可以看出两者的差异,也能看到可变序列从不可变序列那里继承了一些方法。
列表推导和生成器表达式
列表推导:构建列表的快捷方式
生成器表达式:可以用来创建其他任何类型的序列
列表推导
原则是只用列表推导来创建新的列表,并且尽量保持简短
symbols = '!@#$%^'
codes=[ord(symbol) for symbol in symbols]
print codes
[33, 64, 35, 36, 37, 94]
笛卡尔积
一个列表,3种不同尺寸的T恤衫,每个尺寸有2个颜色
colors=['black','white']
sizes=['S','M','L']
tshirts=[(color,size) for color in colors for size in sizes]
print tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
- 得到的结果先以颜色排列,再以尺码排列
- 循环嵌套关系先color在size外层
生成器表达式
使用生成器表达式建立元组和数组
symbols = '!@#$%^'
tucodes=tuple(ord(symbol) for symbol in symbols)
print tucodes
(33, 64, 35, 36, 37, 94)
import array
arcodes=array.array('I',(ord(symbol) for symbol in symbols))
print arcodes
array('I', [33L, 64L, 35L, 36L, 37L, 94L])
- 如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来
- array的构造方法需要两个参数,因此括号是必须的。第一参数’I’指定了数组中数字的存储方式
使用生成器表达式计算笛卡尔积
for tshirt in ('%s %s' % (c,s) for c in colors for s in sizes):
print tshirt
black S
black M
black L
white S
white M
white L
内存中不会留下一个有6个组合的列表,生成器表达式会在每次for循环运行时才生成一个组合。
最后
以上就是有魅力皮带为你收集整理的Fluent Python读书笔记(三)内置序列类型的全部内容,希望文章能够帮你解决Fluent Python读书笔记(三)内置序列类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复