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、内容纯属个人思考,有误处欢迎指出;