一、map函数
1、自定义函数,实现类似于map函数的功能
1 num_l = [1,3,4,5,6,9] 2 def power(n): 3 return n ** 2 4 def map_test(func,array): 5 li0 = [] 6 for i in array: 7 p = func(i) 8 li0.append(p) 9 return li0 10 11 f = map_test(power,num_l) 运用自己定义的函数来计算 12 print(f) 13 f = map_test(lambda x: x ** 2, num_l) #调用匿名函数实现简单的功能,减少代码量,以下几种类似 14 print(f) 15 16 17 def add_one(n): 18 return n + 1 19 20 f1 = map_test(add_one,num_l) 21 print(f1) 22 f1 = map_test(lambda x: x+1, num_l) 23 print(f1) 24 25 def reduce_one(n): 26 return n - 1 27 28 f2 = map_test(reduce_one,num_l) 29 print(f2) 30 f2 = map_test(lambda x: x - 1, num_l) 31 print(f2)
1 [1, 9, 16, 25, 36, 81] 2 [1, 9, 16, 25, 36, 81] 3 [2, 4, 5, 6, 7, 10] 4 [2, 4, 5, 6, 7, 10] 5 [0, 2, 3, 4, 5, 8] 6 [0, 2, 3, 4, 5, 8]
2、map函数的运用:作用于成哥序列,让整个序列实现想要的转换
1 ############n内置函数 map 的使用 2 num_l = [1,3,4,5,6,9] 3 f3 = map(lambda x:x + 3, num_l) # map(func, *iterables) --> map object 这是map函数官方解释 4 print(f3) 5 print(list(f3)) #注意细节:map返回只是一个object,需要用list形式打印出来 6 7 s = 'abcefg' 8 f4 = map(lambda st:st.upper(),s) 9 print(f4) 10 print(list(f4))
1 <map object at 0x000001C6AC2B7860> 2 [4, 6, 7, 8, 9, 12] 3 <map object at 0x000001C6AC2B7898> 4 ['A', 'B', 'C', 'E', 'F', 'G']
二、filter函数
1、自定义函数,实现类似于filter的功能
例1:铺垫
1 bjper = ['bj_老王','bj_老赵','bj_老李','tian an men','gugong'] 2 def filter_test(array): 3 li0 = [] 4 li1 = [] 5 for i in array: 6 if i.startswith('bj'): 7 li0.append(i) 8 if not i.startswith('bj'): 9 li1.append(i) 10 return li0,li1 11 12 f = filter_test(bjper) 13 print(f)
1 (['bj_老王', 'bj_老赵', 'bj_老李'], ['tian an men', 'gugong'])
例2
1 def show_bj(s): 2 return s.startswith('bj') 3 4 bjper = ['bj_老王ha','bj_老赵','bj_老李','tian an menha','gugongha'] 5 def filter_test(func,array): 6 li0 = [] 7 for i in array: 8 if func(i): 9 li0.append(i) 10 return li0 11 12 f = filter_test(show_bj,bjper) 13 print(f) 14 # lambad 运用 15 f = filter_test(lambda s:s.endswith('ha'),bjper) 16 print(f)
1 ['bj_老王ha', 'bj_老赵', 'bj_老李'] 2 ['bj_老王ha', 'tian an menha', 'gugongha']
2、filter函数运用:主要筛选出想要的元素
1 ################ filter 应用:官方解释:filter(function or None, iterable) --> filter object 2 bjper = ['bj_老王ha','bj_老赵','bj_老李','tian an menha','gugongha'] 3 def show_bj(s): 4 return s.startswith('bj') 5 f1 = filter(show_bj,bjper) 6 print(f1) 7 print(list(f1)) #注意细节:filter返回只是一个object,需要用list形式打印出来 8 9 f2 = filter(lambda st: not st.endswith('ha'),bjper) 10 print(f2) 11 print(list(f2))
1 <filter object at 0x00000218E63A7898> 2 ['bj_老王ha', 'bj_老赵', 'bj_老李'] 3 <filter object at 0x00000218E63A78D0> 4 ['bj_老赵', 'bj_老李']
三、reduce函数:
1、
例1
1 num_l = [2,4,10,100] 2 init = 0 3 for i in num_l: 4 init += i 5 print(init)
结果:116
例2
1 num_l = [2,4,10,100] 2 def sum_test(array): 3 init = 0 4 for i in array: 5 init += i 6 return init 7 f = sum_test(num_l) 8 print(f)
结果:116
例3
1 num_l = [2,4,10,100] 2 init = 1 3 for i in num_l: 4 init *= i 5 print(init)
结果8000
例4
1 num_l = [2,4,10,100] 2 def mul(array): 3 init = 1 4 for i in array: 5 init *= i 6 return init 7 8 f = mul(num_l) 9 print(f)
结果:8000
例5
1 num_l = [2,4,10,100] 2 def reduce_test(func,array,init=None): 3 init = array.pop(0) 4 for i in array: 5 init = func(init,i) 6 return init 7 8 def product(x,y): 9 return x * y 10 11 f = reduce_test(product,num_l,) 12 print(f)
结果:8000
例6
1 num_l = [2,4,10,100] 2 def reduce_test(func,array,init=None): 3 if init == None: 4 res = array.pop(0) 5 else: 6 res = init 7 for i in array: 8 res = func(res,i) 9 return res 10 11 def product(x,y): 12 return x * y 13 14 f = reduce_test(product,num_l,4) 15 print(f)
结果:32000
例7
1 ############# reduce 函数 2 #使用前需要导入reduce函数包 3 from functools import reduce 4 5 num_l = [2,4,10,100] 6 def product(x,y): 7 return x * y 8 9 f1 = reduce(product,num_l,5) 10 print(f1) 11 12 f1 = reduce(lambda x,y: x + y + 1,num_l,1000) 13 print(f1)
1 40000 2 1120