Python练习题笔记--匿名函数、过滤器函数、映射函数

一、匿名函数:

1.请将下边的匿名函数转变为普通函数:

lambda x: x if x%2 else None

答案:

>>> def fun(x):
	if x%2:
		return x
	else:
		return None

二、过滤器函数:

1.利用filter()和lambda表达式快速求出100以内的所有3的倍数:

答案:

#答案1
>>> list(filter(lambda x:x%3==0,range(1,101)))
#答案2
>>> list(filter(lambda x:not(x%3),range(1,101)))

2.使用列表推导式代替filter()和lambda组合,求出100以内的所有3的倍数

答案:

#答案1:
>>> [i for i in range(1,101) if i%3==0]
#答案2:
>>> [i for i in range(1,101) if not(i%3)]

注:列表推导也叫列表解析,可以用来动态创建列表,语法:[关于i的表达式 for i in A]例子如下:

>>> [i*i for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> #上述代码分别打印了0-9各个数的平方,将其形成列表
>>> #以上代码可以解析为
>>> list1=[]
>>> for i in range(10):
	list1.append(i*i)

	
>>> list1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

三、映射函数:

1.还记得打包函数zip吗,使用zip会将两个数以元组的形式绑在一块,例如:

>>> list(zip([1,2,3,4,5,6],[1,2,3]))
[(1, 1), (2, 2), (3, 3)] 

2.如果希望打包的形式是灵活多变的列表而不是元组(希望是[[1,1],[2,2],[3,3]]这种形式),使用map和lambda表达式应该如何实现?

答案:

>>> list(map(lambda x,y:[x,y],[1,2,3,4,5,6],[1,2,3]))
[[1, 1], [2, 2], [3, 3]]

3.目测一下表达式会打印什么内容?

>>> def fun(n):
	return lambda s:s*n

>>> num=fun(3)
>>> print(num(10));print('Love')

答案:

30
Love

 

你可能感兴趣的:(python)