核心知识点:

1.列表推导式要比内置的map和filter函数清晰,因为它无需额外编写lambda表达式。

2.列表推导式可以跳过输入列表中的某些元素,如果改用map来做,那就必须辅以filter方能实现。

3.字典与集也支持推导表达式。

Python提供了一套精炼的写法,可以根据一份列表里制作另外一份。这种表达式成为列表推倒式。

例如,要用列表中每个元素的平方值来创建另一份列表,可以这样实现:

>>> a = [1,2,3,4,5,6,7,8]
>>> squares = [x**2 for x in a]
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64]

除非是调用只有一个参数的函数,否则,对于简单的情况来说,列表推导要比内置的map函数更清晰。

如果使用map就要创建lambda函数,以便计算新列表中各个元素的值,这会使代码看上去比较乱。

>>> squares = map(lambda x:x**2,a)
>>> print(squares)
<map object at 0x0000029BC3251748>
>>> list(squares)
[1, 4, 9, 16, 25, 36, 49, 64]

列表推导式不像map那么复杂,可以直接过滤原列表中的元素,使得生成的新列表不会包含对应的计算结果。

例如,在计算平方值时,我们只想计算那些为2所整除的数。如果采用列表推导式,只需要在循环的后面添加条件表达式即可:

>>> even_squares = [x**2 for x in a if x%2 == 0]
>>> print(even_squares)
[4, 16, 36, 64]

把内置的filter函数与map结合起来,也能达成同样的效果,但代码会非常难懂。

>>> alt = map(lambda x:x**2,filter(lambda x:x%2 ==0,a))
>>> print(alt)
<map object at 0x0000029BC3251908>
>>> list(alt)
[4, 16, 36, 64]

字典(dict)与集(set)也有和列表类似的推到机制。例如:

>>> chile_ranks = {'kebi':1,'maoxian':2,'xiaoniao':3}
>>> rank_dict = {rank:name for name,rank in chile_ranks.items()}
>>> chile_len_set = {len(name) for name in rank_dict.values()}
>>> print(rank_dict)
{1: 'kebi', 2: 'maoxian', 3: 'xiaoniao'}
>>> print(chile_len_set)
{8, 4, 7}

关于filter和map的用法可以参考我的博客:http://www.cnblogs.com/yangmingxianshen/p/7764637.html

 文章摘抄于Brett Slatkin的《编写高质量Python代码的59个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。 

第7条:用列表推导式来取代map和filter的更多相关文章

  1. python列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  2. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  3. python基础——列表推导式

    python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...

  4. python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一 三元表达式.列表推导式.生成器表达式 一 三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(r ...

  5. 【python】 迭代器、生成器、列表推导式

    一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...

  6. python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...

  7. Python_迭代器、生成器、列表推导式,生成器表达式

    1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...

  8. Day 14 三元运算符,列表推导式,内置函数

    三目运算符 ```python# 三目(元)运算符:就是 if...else...语法糖# 前提:简化if...else...结构,且两个分支有且只有一条语句# 注:三元运算符的结果不一定要与条件直接 ...

  9. python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

随机推荐

  1. Appium Android Bootstrap源代码分析之简单介绍

    在上一个系列中我们分析了UiAutomator的核心源代码,对UiAutomator是怎么执行的原理有了根本的了解.今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appiu ...

  2. 【Excle数据透视】如何隐藏数据透视表字段的分类汇总

    如下图:是显示数据透视表的分类汇总 那么我们现在想弄成以下这样,不显示分类汇总 如何操作呢? 步骤 单击数据透视表任意单元格→数据透视表工具→设计→分类汇总→不显示分类汇总 ***显示分类汇总*** ...

  3. 在Excel2003中给定区域填充随机数?

    1.选中一个单元格,输入“=RAND()*40+60”,点CTRL+ENTER键,即可完成公式填充. 2.鼠标悬停单元格边框右下角,出现“+”符号,左键拉动实现格式复制,从而填充整个区域随机数. ★题 ...

  4. lua学习笔记(五)

    语句     赋值         多重赋值         a, b, c, d = 1, 2, 3, 4         a, b, c = 1, 2         assert(c == ni ...

  5. SpringMvc 面向切面1

    1.配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC &q ...

  6. [转载]Axis2 and CXF的比较

    在Celtix 和XFire 宣布合并的同年,另一个著名开源Web 服务框架Axis 的后继者Axis2 也诞生了.Axis2 并非Axis 的2.0 版,而是完全重写了Axis 的新项目.作为功能和 ...

  7. 安卓TabHost+ViewPager+RadioGroup多功能模板整理

    如今安卓比較流行的布局就是类似新闻client和手机QQ那种的底端可选择,上面的个别页面能够滑动选择. 在測试过程中发现用安卓自带的TabHost去构建.非常难得到自己定义的效果. 因此採用TabHo ...

  8. 解决myeclipse10.x的Servers产生的at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>(Unknown Source)错

    错误: java.lang.NullPointerException at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>(U ...

  9. ActiveMQ与xml rpc

    最近项目在做平台间的消息传递,也让我对平台间消息的传递进行了深一步的探讨.先叙述一下概况 公司上一个版本用的是winform做的监控软件,主要做设备的通信和控制,基本的连接如下

  10. JavaWeb知识点总结一

    JavaWeb知识点总结一 常见的状态码以及其含义 一些常见HTTP状态码为: -- 服务器成功返回网页 -- 服务器不理解请求的语法 -- 请求的网页不存在 -- 服务不可用 常见HTTP状态码大全 ...