本节书摘来自华章社区《编写高质量Python代码的59个有效方法》一书中的第7条:用列表推导来取代map和f?ilter,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章节内容可以访问云栖社区“华章社区”公众号查看
第7条:用列表推导来取代map和f?ilter
Python提供了一种精练的写法,可以根据一份列表来制作另外一份。这种表达式称为list comprehension(列表推导)。例如,要用列表中每个元素的平方值构建另一份列表。如果采用列表推导来实现,那就同时指定制作新列表时所要迭代的输入序列,以及计算新列表中每个元素的值时所用的表达式。
除非是调用只有一个参数的函数,否则,对于简单的情况来说,列表推导要比内置的map函数更清晰。如果使用map,那就要创建lambda函数,以便计算新列表中各个元素的值,这会使代码看起来有些乱。
列表推导则不像map那么复杂,它可以直接过滤原列表中的元素,使得生成的新列表不会包含对应的计算结果。例如,在计算平方值时,我们只想计算那些可以为2所整除的数。如果采用列表推导来做,那么只需在循环后面添加条件表达式即可:
把内置的f?ilter函数与map结合起来,也能达成同样的效果,但是代码会写得非常难懂。
字典(dict)与集(set),也有和列表类似的推导机制。编写算法时,可以通过这些推导机制来创建衍生的数据结构。
要点
列表推导要比内置的map和f?ilter函数清晰,因为它无需额外编写lambda表
达式。
列表推导可以跳过输入列表中的某些元素,如果改用map来做,那就必须辅以f?ilter方能实现。
字典与集也支持推导表达式。