Python学习之函数map filter reduce lambda的用法

一、lambda()函数

1、描述

lambda函数即匿名函数

2、语法

lambda argument_list:expression

解释:argumen_list(可选参数)为参数列表形式非常多如:a=1,b=2;*args;**kwargs、也可为空如lambda:3等等

           expression为表达式(即为通过参数最后执行的结果)形式也非常多常见的x+y;x**2,函数、三元表达式等,可以数值表达式,也可以字符表达式,可以是常量。

3、用法

        1、lambada x,y:2     即无论x,y为多少最后的执行结果均为2

        2、lambda :None     即该函数已把结果固定为关键字None,所以什么也不做就返回None,可把函数的功能去掉

如想把test函数功能替换掉,可test=lambda :None,再执行test已经没有了原来的功能,当然也可以替换为其他功能如:

test=lambda:3,那么再执行test函数就会返回3。因为重新定义了test的地址,和重新定义一个变量类似。

       3、lambda函数可作为值传给变量,即把lambda的地址传给了变量(其实已变为函数),执行的话只需把参数传过去即可

t=lambda x,y:x+y
print(t(3,5))

      4、lambda的三元表达式用法,如:

print(list(map(lambda x:x if x!=3 else 100,[1,2,3,4])))

结果:
[1, 2, 100, 4]

      5、lambda可作为参数传递,应用是比较多的   与map函数应用比较多,如:

print(set(map(lambda x,y,z,s:x+y*z-s,[1,3,4],[10,1,1],[4,5,6],[1,2,3])))
names = ['alex', 'mary', 'jack']
age = [15, 17, 89, 90]
person_dic = {}
print(list(map(lambda x,y:x+str(y),names,age)))
print(dict(map(lambda x,y:(y,x),names,age)))

结果:
{40, 6, 7}   
['alex15', 'mary17', 'jack89']        可合并两个列表拼接字符串为一个列表
{15: 'alex', 17: 'mary', 89: 'jack'}        可合并两个列表生成键值对从而生成字典

 

二、map()函数

1、描述

map() 会根据提供的函数对指定序列做映射(强调的是创建对应关系)。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

2、语法

map() 函数语法:    map(function, iterable, ...)

解释:function:代表函数(可以是内置函数也可以是自定义的函数);iterable:一个或多个序列(如列表,字符串等可for循环的即可迭代对象)

3、返回结果为迭代器对象

4、实例

print(set(map(lambda x,y,z,s:x+y*z-s,[1,3,4],[10,1,1],[4,5,6],[1,2,3,4,5])))
t=map(lambda x,y,z,g:x+y*z-g,[1,2,4],[12,45,55],[11,22,33],[44,55,66,154])
print(t)
print(type(t))
print(t.__next__())


结果:
{40, 6, 7}
<map object at 0x7fb280b13f60>
<class 'map'>
89

注:1、为什么第一个结果只有三个元素,以列表中元素个数最少的为基准。

        2、map返回的迭代对象因为有__next__()方法

5、map与zip即拉链函数的简单区别

    map()一样可以达到zip()的效果,zip()简洁但map()更灵活

names = ['alex', 'mary', 'jack']
age = [15, 17, 89, 90]
print(max(set(map(lambda x,y:(y,x),names,age))))
print(list(map(lambda x,y:(y,x),names,age)))
print(max(list(zip(age, names))))

结果:
(89, 'jack')
[(15, 'alex'), (17, 'mary'), (89, 'jack')]
(89, 'jack')

三、filter()函数

1、描述

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

2、语法

以下是 filter() 方法的语法:

filter(function, iterable)        function: 条件函数。iterable : 可迭代对象。

3、返回迭代器对象

4、实例

内置函数

print(list(filter(lambda x:not x==1,[1,3,5])))

结果:
[3, 5]

自定义函数

"""判断3的倍数"""
def judge(x):
    return x % 3 ==0
print(list(filter(judge,list(range(1,30)))))

结果:
[3, 6, 9, 12, 15, 18, 21, 24, 27]

四、reduce()函数

1、描述

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

注:Python2为内置函数,Python3已不为内置需先 import functools fromreduce

2、语法

reduce() 函数语法:

reduce(function, iterable[, initializer])

function -- 函数,要求有两个参数

iterable -- 可迭代对象

initializer -- 可选,初始参数,带中括号的为可选参数

3、实例

from functools import reduce
print(reduce(lambda x,y:x+y,[1,5,6]))
print(reduce(lambda x,y:x+y,[1,5,6],10))

结果:
12
22       因为有初始值10

参考:菜鸟教程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值