介绍下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+621 

三: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去掉列表中的0empty_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 primeif __name__ == '__main__':try :start = input("Enter a start Number :")except :start = 2   #开始值默认2try :stop  = input("Enter a stop  Number :")except :stop  = 0   #停止数,默认0,即不返回任何值is_prime(start,stop)

结果:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

转载于:https://www.cnblogs.com/yang520ming/p/8888430.html

Python【map、reduce、filter】内置函数使用说明(转载)相关推荐

  1. python map(function, iterable, ...) 内置函数的用法 (序列迭代调用并返回)

    在python3中,map()的返回结果不是列表,而是map对象,获取里面值的方式与列表不同: def square(x):return x**x map_list=map(square,[1,2,3 ...

  2. python文档整理,Python官方文档内置函数整理Word版

    <Python官方文档内置函数整理Word版>由会员分享,可在线阅读,更多相关<Python官方文档内置函数整理Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀W ...

  3. 【Python养成】常用内置函数 — 2(详解25个内置函数)

    图片来自互联网 文章目录 前言 二.内置函数详解 1.函数:chr(x) 2.函数:dir([obj]) 3.函数:divmod(x,y) 4.函数:enumerate(sequence, [star ...

  4. Python标准库:内置函数dict(mapping, **kwarg)

    Python标准库:内置函数dict(mapping, **kwarg) 本函数是从一个映射函数对象构造一个新字典. 与dict(**kwarg)函数不一样的地方是參数输入是一个映射类型的函数对象,比 ...

  5. Python内置函数使用说明

    函数 功能简要说明 abs(x) 返回数字x的绝对值或复数x的模 all(iterable) 如果对于可迭代对象iterable中所有元素x都有bool(x)为True,则返回True.对于空的可迭代 ...

  6. python filter内置函数_python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...

  7. python小白从哪来开始-python 从小白开始 - 内置函数

    1 #all() 如果可迭代对象里面都为真则为True,如果有一个为假就为False 2 #非0为真,0为假. 3 a = all([0,5])4 print(a)5 6 #any() 如果可迭代对象 ...

  8. Python装饰器、内置函数之金兰契友

    装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种.所以也可以理解装饰器是一种特殊的函数. 因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展 ...

  9. python装饰器 稀里糊涂_万恶之源 - Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  10. python的68个内置函数

    内置函数 内置函数就是python给你提供的, 拿来直接用的函数, 比如print., input等. 截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # ...

最新文章

  1. 软件需求开发的18般武艺
  2. 非常好用的网站状态监控服务:SiteUpTime,监控你的Http/Mail/Ping etc.
  3. 企业核心员工的长期激励计划
  4. 三菱伺服自动调谐_三菱伺服在执行离线自动调整之前
  5. 2、AbstractApplicationContext的refresh功能概述
  6. 大三寒假--算法复习
  7. github git clone ssh协议 clone超慢解决方案,提高Github Clone速度
  8. 卢卡奇总体性原则_重识青年卢卡奇的“历史”概念问题
  9. A002-185-2531
  10. 115-RTKLIB及GAMP中PPP的随机模型
  11. Matlab里面如何实现多行注释
  12. html页面背景图片不够大怎么办,Word背景图片不够大怎么办
  13. Unity游戏开发:背包系统的实现
  14. [转]WinRAR破解方法
  15. nginx 504错误日志出现 upstream timed out (110: Connection timed out) while reading response
  16. 1. Java8 vs Java11
  17. 黑金花大理石_黑色是百搭更是经典 — 黑金花大理石简介及案例欣赏
  18. maven工程依赖war包提示Could not find artifact xxxxxxxxx
  19. WIN7和WIN10微信多开
  20. Android SDK Manager详解

热门文章

  1. 2018.09.14python学习第四天part3
  2. Confluence 6 查看你的许可证细节
  3. iOS,QRCord(矩阵二维码)
  4. 安装java sdk,配置java环境
  5. symantec BESR 异机恢复
  6. NetTiers学习笔记12---deepload的递归
  7. ip设计包括什么_一天卖200多万个潮玩,泡泡玛特如何打造超级IP?
  8. Luogu2564 [SCOI2009]生日礼物
  9. [数论] 快速傅里叶变换FFT
  10. java怎么把程序写入持久化_如何将DataFrame持久化到Hive表?