python高阶函数

map函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把list的每个元素都作平方,就可以用map()函数:

 

 因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:

def f(x):
return x*x
res=map(lambda x:x*x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(res)
l=[]
for i in res:
l.append(i)
print(l)
<map object at 0x00000182506BABA8>
[1, 4, 9, 16, 25, 36, 49, 64, 81]

 

filter函数

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:

def is_odd(x):
    return x % 2 == 1
res=filter(lambda x:x%2==1, [1, 4, 6, 7, 9, 12, 17])
print(res)
l=[]
for i in res:
    l.append(i)
print(l)
<filter object at 0x0000013E69DBAB38>
[1, 7, 9, 17]

 

zip函数

l=[1,2,3,4]
l1=[99,88,77,88,66]
l2=[12,45,78,98,63,68]
res=zip(l,l1,l2)
print(res)
for i in res:
    print(i)
<zip object at 0x000002E67D8C5388>
(1, 99, 12)
(2, 88, 45)
(3, 77, 78)
(4, 88, 98)
源码:
class
zip(object): """ zip(iter1 [,iter2 [...]]) --> zip object Return a zip object whose .__next__() method returns a tuple where the i-th element comes from the i-th iterable argument. The .__next__() method continues until the shortest iterable in the argument sequence is exhausted and then it raises StopIteration. """

 

 

enum函数

l=[1,2,3,4]

res=enumerate(l,start=5)
print(res)
for i in res:
    print(i)
<enumerate object at 0x0000018BA6D3FAF8>
(5, 1)
(6, 2)
(7, 3)
(8, 4)
源码:
def __init__(self, iterable, start=0): # known special case of enumerate.__init__ """ Initialize self. See help(type(self)) for accurate signature. """ pass

 

接下来来一道面试题:

求1-100之间所有的偶数之和,只能用一行代码

>>sum(filter(lambda x:x%2==0,[x for x in range(1,101)]))
>>2550

用老办法的话就是

num=0
for i in range(1,101):
    if i%2==0:
        num+=i
print(num)#2550
posted @ 2019-12-24 22:50  腹肌猿  阅读(227)  评论(0编辑  收藏  举报