列表解析:如何从filter函数一步步重构到列表解析(经典)
来源:互联网 发布:angular 1.1.0.min.js 编辑:程序博客网 时间:2024/06/14 20:00
本产生一个较大的随机数集合,然后
过滤出所有的的偶数,留给我们一个需要的数据集
原始版:
from random import randint
def odd(n):
return n % 2
allNums = []
for eachNum in range(9):
allNums.append(randint(1, 99))
print filter(odd, allNums)
代码包括两个函数:odd(), 确定一个整数是奇数(真) 或者 偶数(假)Boolean 函数,以及
main(), 主要的驱动部件。main()的目的是来产生10 个在1 到100 之间的随机数:然后调用filter()
来移除掉所有的偶数。最后,先显示出我们过滤列表的大小,然后是奇数的集合
第一次重构
在第二次浏览时,我们注意到odd()是非常的简单的以致能用一个lambda 表达式替换
from random import randint allNums = []
for eachNum in range(9):
allNums.append(randint(1, 99))
print filter(lambda n: n%2, allNums)
from random import randint
allNums = []
for eachNum in range(9):
allNums.append(randint(1, 99))
print [n for n in allNums if n%2]
Refactoring Pass 3
我们通过整合另外的列表解析将我们最后的列表放在一起,来进一步简化我们的代码。正如你
如下看到的一样, 由于列表解析灵活的语法,就不再需要一个暂时的变量了。(为了简单,我们用
一个较短的名字将randint()倒入到我们的代码中)
from random import randint as ri
print [n for n in [ri(1,99) for i in range(9)] if n%2]
虽然比原来的长些, 但是这行扮演了该例子中核心部分的代码不再如其他人想的那么模糊不清
通过以上三次重构,可以很清晰的读懂最后一段函数的意思。
- 列表解析:如何从filter函数一步步重构到列表解析(经典)
- 列表、列表解析、过滤器filter和map
- python的map、filter、reduce函数以及列表解析式
- 虚函数列表 解析
- python-2-1 如何在列表, 字典, 集合中根据条件筛选数据-列表解析-filter
- map、filter、if语句、列表解析
- 列表解析(推导)
- 列表解析
- 列表解析
- 列表解析
- 列表解析
- 列表解析
- Python列表解析(列表推导式)
- 列表(操作方法 解析式)
- C++初始化函数列表详细解析
- XML解析器列表
- py列表解析例子
- Python 列表解析
- 中国物流信息化的五大瓶颈
- 软件测试工具比较
- Invalidate
- 碎片图像无缝拼合技术的VC++实现
- VS 2008中的jQuery Intellisense
- 列表解析:如何从filter函数一步步重构到列表解析(经典)
- 图文:易路联动公司董事长徐国洪
- Shell对话框(一)
- 再说吧,一辈子还长着
- C#_F2按钮清空的常用方法_面试题
- 关于ORACLE数据库中汉字显示乱码问题的探讨
- Dreamweaver 图像特效制作技法
- 【asp.net】使用XPathExpression类对XML进行排序
- jquery写的弹出层