序列类型:
list 、tuple、str、array.array、collections.deque、bytes、bytearray、memoryview
容器序列:能够存放不同类型的数据
list、tuple 、 collections.deque
扁平序列:仅能容纳一种类型的数据
str、bytes、bytearray、memoryview 、 array.array
~~~~~~~ 容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。换句话说,扁平序列其实是一段连续的内存空间。由此可见扁平序列其实更加紧凑,但是它里面只能存放诸如字符、字节和数值这种基础类型。
~~~~~~~ 列表推导和生成器表达式能让你写出可读性更好更高效的代码,十分有用,且能日常代替filter()和map()的使用。
列表推导
~~~~~~~ 列表推导是构建列表(list)的快捷方式。
# 将字符变为ASCII码 ord()
symbols = '$¢£¥€¤'
code = []
for i in symbols: # 这里的i指的是symbols对象的引用 i = $、¢、£、¥、€、¤
code.append(ord(i))
code
>>> [36, 162, 163, 165, 8364, 164]
使用列表推导的简洁写法:
symbols = '$¢£¥€¤'
code = [ ord(i) for i in symbols ]
code
>>> [36, 162, 163, 165, 8364, 164]
注意:Python 会忽略代码里 []、{} 和 () 中的换行和空格,因此如果你的代码里有多行的列表、列表推导、生成器表达式、字典这一类的,可以省略不好看的续行符 \。
关于filter()和map()
filter() 作用于序列,过滤掉序列中不符合条件的元素,返回一个迭代器对象(<filter at 0x26241e97b88>),使用 list() 转换成列表。该函数接收两个参数,第一个为判别条件函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回True 的元素放到新列表中。
filter(function, iterable)