Fluent Python读书笔记(三)

内置序列类型

容器序列
list、tuplecollections.deque这些序列可以存放不同类型的数据。存放的是它们所包含的任意类型的对象的引用。
扁平序列
str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型。存放的是值而不是引用,扁平序列其实是一段连续的内存空间,所以它更加紧凑,但它里面只能存放诸如字符、字节和数值这种基础类型。

可变序列
list、bytearray、array.array、collections.deque和memoryview。
不可变序列
tuple、str和bytes

collections.abc中的几个类
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')]
  1. 得到的结果先以颜色排列,再以尺码排列
  2. 循环嵌套关系先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])
  1. 如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来
  2. 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循环运行时才生成一个组合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值