Fluentpython 数据结构
2.1 内置序列类型概览
Python 标准库用 C 实现了丰富的序列类型,列举如下。
容器序列
list、tuple 和 collections.deque 这些序列能存放不同类型的数据。
扁平序列
str、bytes、bytearray、memoryview 和 array.array,这类序列只能容纳一种类型。
序列类型还能按照能否被修改来分类。
可变序列
list、bytearray、array.array、collections.deque 和memoryview。
不可变序列
tuple、str 和 bytes。
列表推导和生成器表达式
列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。
很多 Python 程序员都把列表推导(list comprehension)简称为listcomps,生成式表达器(generator expression)则称为 genexps
列表推到示例:
>>> symbols = '$¢£¥€¤'
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[36, 162, 163, 165, 8364, 164]
如果不用列表推导的实现方法:
>>> symbols = '$¢£¥€¤'
>>> codes = []
>>> for symbol in symbols: # 使用for循环
... codes.append(ord(symbol))
...
>>> codes
[36, 162, 163, 165, 8364, 164]
列表推导也可能被滥用,通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。
Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量, python3中是不会出现的。 如下:
PYTHON3 PYTHON2
>>> x = 'ABC' >>> x = 'ABC'
>>> dummy = [ord(x) for x in x] >>> dummy = [ord(x) for x in x]
>>> x >>> x
'ABC' 'C'
>>> dummy >>> dummy
[65, 66, 67] [65, 66, 67]
>>> >>>
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)
的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或Unicode 数值,
如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
>>> ord("e")
101
>>> chr(101)
'e'
网友评论