1 map()映射
1 #把一个同学的5科成绩列表中,鉴于没有一门及格的,我决定给每一门成绩加上60分 2 #请叫我雷锋 3 score = [1,2,3,4,55] 4 result = [] 5 #方法一:用for遍历 6 for i in score: 7 a = i + 60 8 if a > 100 : 9 a = 100 10 result.append(a) 11 12 print(result) 13 14 #[61, 62, 63, 64, 100] #每一门都及格了 15 16 #方法二:用推导,听说这种方式效率更高,底层是C语言实现的 17 re = [i + 60 for i in score if i <= 40 ] 18 print(re) 19 20 #[61, 62, 63, 64] 21 #少了一门成绩,该怎么解释呢 22 #是我水平有限吗?55分的搞不定了 23 24 #方法三:用map()映射,map()接受两个参数,第一个参数是函数;第二个参数是可迭代对象 25 26 def fun(x): 27 28 if x > 40: 29 return 100 30 else: 31 return x + 60 32 33 map(fun,score) 34 print(score) 35 a = map(fun,score) 36 print(a) 37 38 #[1, 2, 3, 4, 55] 39 #<map object at 0x00000000006D70F0> #map()返回的是迭代器对象 40 41 l = list(a) 42 print(l) 43 44 #[1, 2, 3, 4, 55] 45 #<map object at 0x00000000006CD630> 46 #[61, 62, 63, 64, 100] 47 48 #这个map()函数可以这么理解,就是从作为第二个参数的可迭代对象中取出一个元素交个函数处理, 49 #并将函数的处理结果组成一个迭代器对象返回 50 #所以,作为map第一个参数的函数在编写的时候要注意是把一个元素值作为参数的 51 52 t = tuple(map(fun,score)) 53 print(t) 54 #61, 62, 63, 64, 100)
2 filter()过滤
1 #filter()也是接受两个参数,第一个参数是函数名;第二个参数是可迭代对象 2 #过滤器的作用是逐个从可迭代对象中取出元素,去函数中判断一下是否符合 3 #函数中定义的判断逻辑,如果符合就把符合条件的元素以迭代器的形式返回 4 #需要注意的是,函数的作用是判断,只需要返回判断的结果就行了 5 6 #需求,有一个整数列表,只想取出其中的偶数 7 l = [1,2,3,4,5,6,7,8,9] 8 9 def fun(x): 10 if x % 2 == 0: 11 return True 12 else: 13 return False 14 15 result = filter(fun,l) 16 for i in result: 17 print(i) 18 19 #2 20 #4 21 #6 22 #8
3 reduce()合并
1 from functools import * 2 3 #reduce(fun,Iter)函数会将可迭代对子昂中所有数据进行如下操作: 4 #用传递给reduce中的函数(两个参数),先对可迭代对象中的前两个元素进行操作, 5 #并将预算结果和第三个元素交给fun函数运算,最终得到一个计算结果 6 7 l = [1,2,3,4,5,6,7,8,9] 8 9 def fun(x,y): 10 return x + y 11 12 re = reduce(fun,l) 13 print(re) 14 # 45