流畅的 Python(14):序列构成的数组 2.2.2

阅读数:11 2019 年 11 月 20 日 16:56

流畅的Python(14):序列构成的数组 2.2.2

内容简介
本书致力于帮助 Python 开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道 Python 风格的代码。本书尤其深入探讨了 Python 语言的高级用法,涵盖数据结构、Python 风格的对象、并行与并发,以及元编程等不同的方面。

(列表推导同filtermap的比较)

filtermap 合起来能做的事情,列表推导也可以做,而且还不需要借助难以理解和阅读的 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_speed.py 的脚本,代码中有这两个方法的效率的比较。

第 5 章会更详细地讨论 mapfilter。下面就来看看如何用列表推导来计算笛卡儿积:两个或以上的列表中的元素对构成元组,这些元组构成的列表就是笛卡儿积。

图灵地址 https://www.ituring.com.cn/book/1564

评论

发布