题记

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

一:map

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

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

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

二:reduce

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

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

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

三:filter

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

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

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

上面的这些例子中都用到了一个 lambda表达式

  1. >>> a=lambda x:x+3
  2. >>> a(2)
  3. 5
  4. >>> a=lambda x,y:x+y
  5. >>> a(2,3)
  6. 5

四,应用map,reduce,filter

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

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

结果:

  1. zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
  2. Enter a Number(int) : 1
  3. zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
  4. Enter a Number(int) : 2
  5. zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
  6. Enter a Number(int) : 3
  7. zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
  8. Enter a Number(int) : 4
  9. zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py
  10. Enter a Number(int) : 5
  11. 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)

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

结果:

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

更多入门教程可以参考 (http://www.bugingcode.com/python_start/)

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

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

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

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

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

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

    转自:http://www.blogjava.net/vagasnail/articles/301140.html?opt=admin 介绍下Python 中 map,reduce,和filter 内 ...

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

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

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

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

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

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

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

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

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

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

  9. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

随机推荐

  1. 2019收藏盘点(编程语言/AI/面试/实用工具)

    2020.1.5更新 我看过的后面会加上评价 编程学习 java开源项目汇总: https://github.com/Snailclimb/awesome-java 大数据学习入门: https:// ...

  2. day58-mysql-视图,触发器

    一. 视图 .1创建视图 create view p_view as select name,age from person; 视图的作用是隐藏数据,例如上面语句没有查询工资,是为了隐藏它,这样就避免 ...

  3. 【学习笔记】 2-SAT问题

    Algorithm Description \(2-SAT\)问题就是给定一串布尔变量,每个变量只能为真或假. 要求对这些变量进行赋值,满足布尔方程. 会有一些形如 \(x_1||x_2\) 或者 \ ...

  4. 通过javascri实现输入框只能输入数字

    输入框只能输入数字 <input type="text" onkeyup="value=value.replace(/[^\d]/g,'');"> ...

  5. Equal Cut

    Equal Cut 题目描述 Snuke has an integer sequence A of length N. He will make three cuts in A and divide ...

  6. windows10使用npm安装vue、vue-cli

    从网上下载了一个免费的vue.js前端模板,准备和Django整合出一个项目出来,然后发现前端代码都是.vue文件,已经整合过.html,很容易,感觉这个.vue的前端稍微复杂一些 本文主要参考博客及 ...

  7. mediawiki问题

    部分内容参考 http://blog.csdn.net/gaogao0603/article/details/7689670 1.启用文件上传:在LocalSettings.php修改或者增加如下:$ ...

  8. 52)PHP,加了单例模式的数据库代码

    <?php class db { public $host ;//= "localhost";//定义默认连接方式 public $User;//= "root&q ...

  9. rest framework-解析器和渲染器-长期维护

    ###############   解析器   ############### # 解析器----数据解析器, # # 前端发送了json数据,在request的body里面, # 我们需要把json ...

  10. 好久不见,Java设计模式

    引子 设计模式是很多程序员总结出来的最佳实践.曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过.现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认的最佳实践 ...