Python中lamba,filter,map,reduce函数之学习总结

目录

前言

一、Lambada匿名函数的几种用法

二、filter函数

1.概述

2.常用方式:

三、Map(函数,序列)

四、reduce(函数,序列)

五.总结



前言

Python的一些内置函数在程序中经常运用到,以下是本人对一些常用内置函数的总结,水平有限,请多多包涵。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Lambada匿名函数的几种用法

示例

下面是一些lambda函数示例:

      lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y
     lambda:None;函数没有输入参数,输出是None
     lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
     lambda **kwargs: 1;输入是任意键值对参数,输出是1

四个用法
 

由于lambda语法是固定的,其本质上只有一种用法,那就是定义一个lambda函数。在实际中,根据这个lambda函数应用场景的不同,可以将lambda函数的用法扩展为以下几种:

        1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。

例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。

        2.将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。

例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。

      3. 将lambda函数作为其他函数的返回值,返回给调用者。

函数的返回值也可以是函数。例如return lambda x, y: x+y返回一个加法函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数。内部函数能够访问外部函数的局部变量,这个特性是闭包(Closure)编程的基础,在这里我们不展开。

      4. 将lambda函数作为参数传递给其他函数。

部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。

filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。

sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。

reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。

另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入。

二、filter函数

1.概述

filter()函数是Python 3内置的一种常用函数,主要的功能是按照给定的条件过滤列表,并返回符合条件的元素。filter为真(非0)被保留,为假(0)则舍弃

filter(function,iterable)
 
function -> 判断条件
iterable -> 可迭代对象

和map函数相同,在Python中filter函数返回的是一个迭代器,这意味着我们无法通过index访问filter对象,也不能通过len获得filter对象的长度。

我们可以直接for循环来依次输出filter对象中的每个元素,但是这个迭代器只能执一次,如果想多次重复使用filter函数的结果,可以使用list将这个迭代器转换为列表。

# Demo
Demo_lists=[1,2,3,4,5,6,7]
 
Demo_result_lists=filter(lambda x:x>2,Demo_lists)
print(f'filter type : {type(Demo_result_lists)}')
 
print('First iterator output : ')
for iter in Demo_result_lists:
    print(iter)
print('Second iterator output : ')
for iter in Demo_result_lists:
    print(iter)
 
Demo_result_lists=filter(lambda x:x>2,Demo_lists)
Demo_result_lists=list(Demo_result_lists)
print('First list output : ')
print(Demo_result_lists)
print('Second list output : ')
print(Demo_result_lists)
 
 
# Result
First iterator output : 
3
4
5
6
7
Second iterator output : 
 
First list output : 
[3, 4, 5, 6, 7]
Second list output : 
[3, 4, 5, 6, 7]

2.常用方式:

作用:筛选,去除列表的某项,列表里面可为列表,字典等

常用匿名函数lambaz来定义判定条件

注意filter返回的是迭代器,一般都需用list()来变为列表

实例:

1.filter筛选列表奇数

# 1.利用filter函数筛选出列表中为奇数的元素
Demo_lists=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
 
def Is_odd(n):
    return n%2==1
 
Result_lists=filter(Is_odd,Demo_lists)
#非0为保留,0就去除
Result_lists=list(Result_lists)
print(Result_lists)
 
 
# Result
[1, 3, 5, 7, 9, 11, 13, 15, 17]

2.filter筛选字典构成的列表

# 2.利用filter函数处理字典构成的列表
Dict_demo_lists=[
    {'name':'Tom','score':64},
    {'name':'Amy','score':75},
    {'name':'Jack','score':88},
    {'name':'Louis','score':55}
]
 
 
Result_lists=filter(lambda x:x['score']>70,Dict_demo_lists)
Result_lists=list(Result_lists)
 
print(Result_lists)
 
 
 
# Result
[{'name': 'Amy', 'score': 75}, {'name': 'Jack', 'score': 88}]

三、Map(函数,序列)

map() 会根据提供的函数对指定序列做映射。

def square(x) :         # 计算平方数
     return x ** 2
...
>>> map(square, [1,2,3,4,5])    # 计算列表各个元素的平方
<map object at 0x100d3d550>     # 返回迭代器
>>> list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))   # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

四、reduce(函数,序列)

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

函数先对第1,2个元素进行操作,再用得到的结果与第3个进行函数操作,一直到结果与最后一个元素进行操作

#!/usr/bin/python
from functools import reduce

def add(x, y) :            # 两数相加
    return x + y
sum1 = reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
print(sum1)
print(sum2)

>>15
>>15

五、总结

本文仅仅简单介绍了匿名函数lamba,filter,map,reduce的使用,

1.filter,map都返回迭代器(注意用list(迭代器))

2.fliter,map,reduce的第一个参数函数既可以通过def定义,也能匿名函数lamba

3.lamba x:x**2即为x=x**2,        list(fllter(lamba x:x>60,[10,20,60,70,90]))即为[70,90]

list(map(lamba x:x**2,[1,2,3]))即[1,4,9]         reduce(lamba x,y:x+y ,[1,2,3,4])即((1+2)+3)+4=10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值