第7条:用列表推导式来取代map和filter
核心知识点:
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
第7条:用列表推导式来取代map和filter的更多相关文章
- python列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- python基础——列表推导式
python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...
- python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
一 三元表达式.列表推导式.生成器表达式 一 三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(r ...
- 【python】 迭代器、生成器、列表推导式
一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...
- python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
- Day 14 三元运算符,列表推导式,内置函数
三目运算符 ```python# 三目(元)运算符:就是 if...else...语法糖# 前提:简化if...else...结构,且两个分支有且只有一条语句# 注:三元运算符的结果不一定要与条件直接 ...
- python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
随机推荐
- 小猪的Git使用总结
小猪的Git使用总结 文件夹 小猪的Git使用总结 安装配置与文档 下载安装 文档教程相关 概念 Git的四个组成部分 文件的几个状态 Git与SVN版本号版本号控制存储差异 每次Commit时仓库中 ...
- Makefile.am, Makefile.in 与 Makefile的关系(转)
文章出处:http://blog.mcuol.com/User/wangguangdong/Article/17384_1.htm Makefile.am, Makefile.in, Makefile ...
- kvo&kvc
Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property ac ...
- ios 从url字符串中获取图片名字
NSString *str = @"http://pic92.nipic.com/file/20160323/22486259_160209631000_2.jpg"; NSLog ...
- c#关闭excel进程失败的解决方法
解决方法如下: 1.运行命令dcomcnfg -32,打开组件服务 2.找到execl服务,属性中设置交互式用户 2.设置用户权限 3.设置IIS权限
- [C++设计模式] singleton 单例模式
这个设计模式主要目的是想在整个系统中仅仅能出现一个类的实例.这样做当然是有必定的.比方你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等. 你希望这个类在整个系统中仅仅能出现一个实 ...
- Dictionary及KeyValuePair使用
/// <summary> /// 除去数组中的空值和签名参数并以字母a到z的顺序排序 /// </summary> /// <param name="dicA ...
- Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
在xml中配置没有问题的情况下.检查是否有单词中间缺少 空格 .2个单词靠的太近的情况! 试了一下情况解决!
- Angular $httpProvider
timeout超时响应 .factory('timestampMarker', ["$rootScope", function () { var timestampMarker = ...
- centos7 ACL
Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 一般权限Linux文件权限与属性详解 之 ACLLinux文件权限与属性详解 之 SUID.SGID & SBI ...