
22
|
第
2
章
2.3.2
列表推导式与
map
和
filter
比较
列表推导式涵盖
map
和
filter
两个函数的功能,写出的代码不像
Python
的
lambda
表达式
那样晦涩难懂。请看示例
2-3
。
示例
2-3
使用列表推导式和
map
/
filter
组合构建同一个列表
>>> symbols = '
$¢£¥€¤
'
>>> beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
>>> beyond_ascii
[162, 163, 165, 8364, 164]
>>> beyond_ascii = list(filter(lambda c: c > 127, map(ord, symbols)))
>>> beyond_ascii
[162, 163, 165, 8364, 164]
我原以为使用
map
和
filter
速度更快,但是
Alex Martelli
告诉我事实并非如此,至少前
面的示例不是这样。本书代码中的
02-array-seq/listcomp_spe
ed.py
脚本对列表推导式和
filter
/
map
的速度进行了简单比较。
map
和
filter
将在第
7
章深入讨论。下面来看如何使用列表推导式计算笛卡儿积,即构建
一个列表,其中包含两个或更多列表中的所有项组成的元组。
2.3.3
笛卡儿积
列表推导式可以根据两个或更多可迭代对象的笛卡儿积构建列表。笛卡儿积的每一项是一
个元组,由输入的各个可迭代对象中的项构成。得到的列表长度等于输入的各个可迭代对 ...