匿名函数lambda

简单的函数不用def定义,用匿名函数lambda就可以搞定:

f = lambda x: x + 1  
res = f(1)
print(res)

lambda和下面的函数是一个作用

def f(x):
return x + 1

 

lambda:lambda是一个表达式,函数体比def简单很多,冒号前面是形参,冒号后面是返回值,匿名函数,省的为了起名字而烦恼
例1:
s = lambda x, y: x + y
res = s(1, 2)
print(res) # 打印出3

 

例2:
res = list(filter(lambda x: x % 2, range(10)))
print(res) # 打印出[1, 3, 5, 7, 9]

 

例3:
res = list(filter(lambda x: not(x % 3), range(100)))
print(res) # 打印出100以内3的倍数,也可以用列表生成式来计算,如[y for y in range(101) if y % 3 == 0]

例4:
我希望打包的形式是灵活多变的列表而不是元组(希望是[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]这种形式),你能做到吗?(采用map和lambda表达式)

res = list(map(lambda x, y: [x, y], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
print(res)

也可以通过函数来实现,代码如下:

def zip_after():
lis = []
for k, v in zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]):
res = [k, v]
lis.append(res)
print(lis)


zip_after()

5、台阶问题/斐波那契
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
fib = lambda n: n if n <= 2 else fib(n - 1) + fib(n - 2)
print(fib(3))

 

6、变态台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
fib = lambda n: n if n < 2 else 2 * fib(n - 1)
print(fib(3))

 

7、矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
第2*n个矩形的覆盖方法等于第2*(n-1)加上第2*(n-2)的方法。

f = lambda n: 1 if n < 2 else f(n - 1) + f(n - 2)
print(f(3))

posted @ 2019-06-17 09:53  laosun0204  阅读(254)  评论(0编辑  收藏  举报