核心知识点:

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个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。 

最新文章

  1. Oracle 11g DG配置简明版
  2. hbuilder的使用
  3. Linux中profile文件详解(转)
  4. matlab 调用dos命令和文件操作
  5. Android笔记:菜单
  6. Mysql 基本操作连接数据库读取信息内容
  7. poj-1469-COURSES-二分图匹配-匈牙利算法(模板)
  8. 文件夹IsShow字段为空
  9. Linux 在一个命令行上执行多个命令(转载)
  10. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送
  11. File 操纵目录
  12. 自行扩展 FineUIMvc 通知对话框(多个并排显示不重叠,支持最新的显示在最上方)
  13. 「mysql优化专题」优化之路高级进阶——表的设计及优化(6)
  14. 如何使用《DB 查询分析器》高效地生成旬报货运量数据
  15. 系统性能监测(使用nmon、nmonanalyser)
  16. spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)
  17. 【caffe】caffe在linux环境下的安装与编译
  18. cookie设置和清除,解决跨目录读取不到cookie值
  19. ASP.NET Core Web 项目 发布的IIS7提示“HTTP Error 502.5 - Process Failure
  20. 两条线段求交点+叉积求面积 poj 1408

热门文章

  1. linux服务器性能检测工具nmon使用
  2. java Map根据value排序
  3. BAT都来参加的 DevOps Master 培训
  4. memcache和memcached区别
  5. SWERC13 Decoding the Hallway
  6. GNU LD 脚本学习笔记
  7. jsp 页面导出excel时字符串数字变成科学计数法的解决方法
  8. Monkey源代码分析之事件源
  9. centos7.2 开发 部署 .net core
  10. Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)