我是靠谱客的博主 有魅力皮带,最近开发中收集的这篇文章主要介绍Fluent Python读书笔记(三)内置序列类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

内置序列类型

容器序列
list、tuple和collections.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循环运行时才生成一个组合。

最后

以上就是有魅力皮带为你收集整理的Fluent Python读书笔记(三)内置序列类型的全部内容,希望文章能够帮你解决Fluent Python读书笔记(三)内置序列类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部