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