01

引言

忙碌了一周,又到了周末,大家周末愉快!

  上一篇介绍了匿名函数lambda的基本使用,学会了可以使得代码更加的优雅,少得代码完成同样的功能。但是在实际运用过程中,lambda会结合其他函数一起使用,比如结合if-else、map()、reduce()、filter()来使用。

02

①结合if else来完成

'''
组成:
结果表达式 if 条件 else 结果表达式


if 满足时,返回if前面的表达式
if 不满足时,返回if后面的表达式
'''


result1= lambda x:x+1 if x==1 else 0
print(result1(0))   ==> 0
print(result1(1))   ==> 2
print(result1(2))   ==> 0

03

②reduce()函数

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

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:

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

reduce()函数语法:

reduce(function, iterable[, initializer])
1、function -- 函数,有两个参数
2、iterable -- 可迭代对象
3、initializer -- 可选,初始参数

运用

from functools import  reduce
def add(x,y):
    return x+y
sum1 = reduce(add,[1,2,3,4,5])
# 结合lambda匿名函数使用
sum2 = reduce(lambda x,y:x+y,[1,2,3,4,5])
print(sum1)  ==>15
print(sum2)  ==>15

注意

1、python3.x reduce()已经被移到functools模块里,要使用,必须导入fuctools模块来调用reduce函数

04

③map()函数

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

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

map()函数语法:

map(function, iterable, ...)
-- 1、function -- 函数
-- 2、iterable -- 一个或多个序列

运用

li = [1,2,3,4,5]
for index,value in enumerate(li):
    li[index] = value * value
print(li) 
==>[1, 4, 9, 16, 25]


li1 = [1,2,3,4,5]
result = list(map(lambda x:x*x,li1))
print(result) 
==> [1, 4, 9, 16, 25]

注意:

1、python2.x返回列表

2、python3.x返回迭代器,若需要,可适应list()转换成list

05

④filter()函数

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

filter()语法:

filter(function, iterable)
参数
-- 1、function -- 判断函数。
-- 2、iterable -- 可迭代对象。

运用

# 保留奇数,删除偶数
li = [1,2,3,4,5,6,7,8,9]
# 由于python3.x返回迭代器对象,所以需要转换成list
print(list(filter(lambda x:x%2==1,li)))


# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 50))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))

注意:

1、python2.7中返回的是列表

2、python3.x返回迭代器对象,可以使用list()转换为list

06

PS

1、内容纯属个人思考,有误处欢迎指出;