转自:http://www.blogjava.net/vagasnail/articles/301140.html?opt=admin

介绍下Python 中 map,reduce,和filter 内置函数的方法:

一:map

map(...)
map(function, sequence[, sequence, ...]) -> list

说明:

对sequence中的item依次执行function(item),执行结果输出为list。

例子:

>>> map(str, range(5))           #对range(5)各项进行str操作
['0', '1', '2', '3', '4'] #返回列表
>>> def add(n):return n+n
...
>>> map(add, range(5)) #对range(5)各项进行add操作
[0, 2, 4, 6, 8]
>>> map(lambda x:x+x,range(5)) #lambda 函数,各项+本身
[0, 2, 4, 6, 8]
>>> map(lambda x:x+1,range(10)) #lambda 函数,各项+1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> map(add,'zhoujy')
['zz', 'hh', 'oo', 'uu', 'jj', 'yy'] #想要输入多个序列,需要支持多个参数的函数,注意的是各序列的长度必须一样,否则报错:
>>> def add(x,y):return x+y
...
>>> map(add,'zhoujy','Python')
['zP', 'hy', 'ot', 'uh', 'jo', 'yn']
>>> def add(x,y,z):return x+y+z
...
>>> map(add,'zhoujy','Python','test') #'test'的长度比其他2个小
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() takes exactly 2 arguments (3 given) >>> map(add,'zhoujy','Python','testop')
['zPt', 'hye', 'ots', 'uht', 'joo', 'ynp']

二:reduce

reduce(...)
reduce(function, sequence[, initial]) -> value

说明:

对sequence中的item顺序迭代调用function,函数必须要有2个参数。要是有第3个参数,则表示初始值,可以继续调用初始值,返回一个值。

例子:

>>> def add(x,y):return x+y
...
>>> reduce(add,range(10)) #1+2+3+...+9
45
>>> reduce(add,range(11)) #1+2+3+...+10
55
>>> reduce(lambda x,y:x*y,range(1,3),5) #lambda 函数,5是初始值, 1*2*5
10
>>> reduce(lambda x,y:x*y,range(1,6)) #阶乘,1*2*3*4*5
120
>>> reduce(lambda x,y:x*y,range(1,6),3) #初始值3,结果再*3
360
>>> reduce(lambda x,y:x+y,[1,2,3,4,5,6]) #1+2+3+4+5+6
21

三:filter

filter(...)
filter(function or None, sequence) -> list, tuple, or string

说明:

对sequence中的item依次执行function(item),将执行结果为True(!=0)的item组成一个List/String/Tuple(取决于sequence的类型)返回,False则退出(0),进行过滤。

例子:

>>> def div(n):return n%2
...
>>> filter(div,range(5)) #返回div输出的不等于0的真值
[1, 3]
>>> filter(div,range(10))
[1, 3, 5, 7, 9]
>>> filter(lambda x : x%2,range(10)) #lambda 函数返回奇数,返回列表
[1, 3, 5, 7, 9]
>>> filter(lambda x : not x%2,range(10))
[0, 2, 4, 6, 8]
>>> def fin(n):return n!='z' #过滤'z' 函数,出现z则返回False
...
>>> filter(fin,'zhoujy') #'z'被过滤
'houjy'
>>> filter(lambda x : x !='z','zhoujy') #labmda返回True值
'houjy'
>>> filter(lambda x : not x=='z','zhoujy') #返回:字符串
'houjy'

上面的这些例子中都用到了一个 lambda表达式,下面举个例子,更多信息见这里

>>> a=lambda x:x+3
>>> a(2)
5
>>> a=lambda x,y:x+y
>>> a(2,3)
5

四,应用map,reduce,filter

1):实现5!+4!+3!+2!+1!

#!/usr/bin/env python
#-*- coding:utf-8 -*-
def add_factorial(n):
empty_list=[] #声明一个空列表,存各个阶乘的结果,方便这些结果相加
for i in map(lambda x:x+1,range(n)): #用传进来的变量(n)来生成一个列表,用map让列表都+1,eg:range(5) => [1,2,3,4,5]
a=reduce(lambda x,y:x*y,map(lambda x:x+1,range(i))) #生成阶乘,用map去掉列表中的0
empty_list.append(a) #把阶乘结果append到空的列表中
return empty_list
if __name__ == '__main__':
import sys
#2选1
#(一)
try:
n = input("Enter a Number(int) : ")
result=add_factorial(n) #传入变量
print reduce(lambda x,y:x+y,result) #阶乘结果相加
except (NameError,TypeError):
print "That's not a Number!"
#(二)
# result = add_factorial(int(sys.argv[1])) #传入变量
# print reduce(lambda x,y:x+y,result) #阶乘结果相加

结果:

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
Enter a Number(int) : 1
1
zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
Enter a Number(int) : 2
3
zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
Enter a Number(int) : 3
9
zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
Enter a Number(int) : 4
33
zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
Enter a Number(int) : 5
153
zhoujy@zhoujy:~/桌面/Python/4$

2):将100~200以内的质数挑选出来

思路:

质数是指:只有1和它本身两个因数,如2、3、5、7都是质数,即能被1和本身整除,1不是质数。
比如一个数字N,看它是否质数的话,就要看:有没有能整除【2,N】之间的数X(不包含本身),即N%X是否为0,要是没有就为质数。
所以我们要实现的算法是:拿一个数字N,去除以【2,N】之间的数X,来得到质数,即:N/2,N/3,……,N/N-2,N/N-1   ===> N/range(2,N)

#!/usr/bin/env python
#-*- coding:utf-8 -*-
def is_prime(start,stop):
stop = stop+1 #包含列表右边的值
prime = filter(lambda x : not [x%i for i in range(2,x) if x%i == 0],range(start,stop)) #取出质数,x从range(start,stop) 取的数
print prime if __name__ == '__main__':
try :
start = input("Enter a start Number :")
except :
start = 2 #开始值默认2
try :
stop = input("Enter a stop Number :")
except :
stop = 0 #停止数,默认0,即不返回任何值
is_prime(start,stop)

结果:

zhoujy@zhoujy:~/桌面/Python/4$ python prime.py
Enter a start Number :
Enter a stop Number :10
[2, 3, 5, 7]
zhoujy@zhoujy:~/桌面/Python/4$ python prime.py
Enter a start Number :10
Enter a stop Number :20
[11, 13, 17, 19]
zhoujy@zhoujy:~/桌面/Python/4$ python prime.py
Enter a start Number :
Enter a stop Number :
[]

Python【map、reduce、filter】内置函数使用说明(转载)的更多相关文章

  1. 【python深入】map/reduce/lambda 内置函数的使用

    python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍: 一.map相关 map()会根据提供的函数对指定的序 ...

  2. python递归函数、二分法、匿名函数、(sorted、map、filter内置函数应用)

    #函数递归是一种特殊的函数嵌套调用,在调用一个函数的过程中,又直接或间接的调用该函数本身递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少 回溯:递 ...

  3. Python【map、reduce、filter】内置函数使用说明

    题记 介绍下Python 中 map,reduce,和filter 内置函数的方法 一:map map(...) map(function, sequence[, sequence, ...]) -& ...

  4. map内置函数、lambda表达式、快捷生成想要的列表、filter内置函数

      map函数                             语法 map(function, iterable, ...) 参数 function -- 函数,有两个参数 iterable ...

  5. python常用内置函数(转载)

    1. 和数字相关 1.1 数据类型 1.2 进制转换 1.3 数学运算 2. 和数据结构相关 2.1 序列 2.2 数据集合 2.3 相关内置函数 3. 和作用域相关 4. 和迭代器生成器相关 5. ...

  6. Python标准库:内置函数hasattr(object, name)

    Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...

  7. Firebird/InterBase内置函数使用说明

    Firebird/InterBase内置函数使用说明(转自:圣域天堂) 2008-10-12 20:56 加*号为FB2.0加入的函数 整理:剑雷(jianlei) 2006-10-13 1. COU ...

  8. python字符串——"奇葩“的内置函数

      一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...

  9. python 类(object)的内置函数

    python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...

随机推荐

  1. Android 中PopupWindow使用 (转)

    参考学习后遇到问题: 要引用:有好几个,可以用错误提示解决: import android.widget.PopupWindow; import android.widget.Toast; Activ ...

  2. Linux rm 删除文件

    rm 删除文件rm -f 强制删除-i 提示-r 删除目录的时候-v 可实话 rm -rfv 多目录 不提示 [root@wang whp]# touch .txt [root@wang whp]# ...

  3. Javascript进度条

    一个简单的进度条演示. <!doctype html> <html> <head> <meta charset="utf8"> &l ...

  4. TCMalloc 对MYSQL 性能 优化的分析

    虽然经过研究发现TCMalloc不适合我们现有的游戏框架,但意外收获发现TCMalloc可以大幅度提高MYSQL 性能及内存占用,这里给出配置及测试的结果: 1.配置 关于TCMalloc的安装,在& ...

  5. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  6. Carcraft

    魔兽登录系统   创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个 ...

  7. 邮件页面为何只能Table写及注意事项

    编写HTML邮件与编写HTML页面有很大的不同.因为,各面向网民的主流邮箱都或多或少的会对它们接收到的HTML邮件在后台进行过滤.毫无疑问,JS代码是被严格过滤掉的,包括所有的事件监听 属性,如onc ...

  8. hibernate考试题

    1.在Hibernate中,以下关于主键生成器说法错误的是(C). A.increment可以用于类型为long.short或byte的主键 long,short,byte都是特殊的int类型 B.i ...

  9. java 24 - 10 GUI 之 四则预算的数据校验

    我想要在校验的过程中,如果输入到操作数中的不是数字,则弹出提醒框: 类 JOptionPane  有助于方便地弹出要求用户提供值或向其发出通知的标准对话框 方法名 描述 showConfirmDial ...

  10. java 22 - 23 多线程之定时器的概述和使用例子

    定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行. 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编 ...