[Python]中filter、map、reduce、lambda的用法

2020-03-10 14:58:57 浏览数 (1)

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/45950985


文章目录
  • @[toc]
  • filter、map、reduce的用法
    • filter用法
    • map用法
    • reduce用法
  • 与lambda的联合使用
    • lambda与filter联合使用
    • lambda与map联合使用
    • lambda与reduce联合使用

Python中内置了一些非常方便的函数,可以节约我们的开发时间和提高程序的效率。

filter、map、reduce的用法

filter用法

filter(function, sequence):对sequence中的item依次执行 function(item),将执行结果为Trueitem组成一个ListStringTuple(取决于sequence的类型)返回

代码语言:javascript复制
# 寻找能被2整除的数
>>> def fun(x): return x%2==0 

>>> filter(fun,range(0,10))
[0, 2, 4, 6, 8]

map用法

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:

代码语言:javascript复制
>>> def fun(x): return x**2

>>> map(fun,range(1,10))
[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> def fun(x): return x x

>>> map(fun,'abcdefg')
['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']#得到的还是列表

另外map()也支持多个 sequence,这就要求function也支持相应数量的参数输入。

代码语言:javascript复制
>>> def add(x,y): return x y

>>> map(add,range(10),range(10))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

reduce用法

reduce(function, sequence[, initial]):对sequence中的item顺序迭代调用 function,如果有 initial,还可以作为初始值调用。

代码语言:javascript复制
>>> def add(x,y): return x y

>>> reduce(add, range(1,4)) #返回 6 = 1 2 3
6
>>> reduce(add, range(1,4), 10) #返回 16 = 1 2 3 ( 10)
16

与lambda的联合使用

lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方。

代码语言:javascript复制
# 定义的平方函数
>>> square = lambda x: x**2
>>> square(3)
9
>>> (lambda x: x**2)(3) #也可以这样调用,单行最小函数
9

所以把filtermapreducelambda 结合起来用,函数就可以简单的写成一行。(装逼技能 Get

lambda与filter联合使用

代码语言:javascript复制
#寻找能被2整除的数
>>> filter( lambda x:x%2==0, range(0,10) )
[0, 2, 4, 6, 8]

lambda与map联合使用

代码语言:javascript复制
#分别求列表数值的平方
>>> map( lambda x:x**2, range(0,10) )
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

lambda与reduce联合使用

代码语言:javascript复制
#1 2 3 ··· 100=?  高斯小时候做过的数学题
>>> reduce( lambda x,y:x y, range(1,101) )
5050

0 人点赞