map()是python中的高阶函数,它接收一个函数 f 和一个集合 list,它会把每个list里面的元素带到函数 f 中 进行计算并返回一个新的list,并不会改变原来list。
例如对于 list = [1,2,3,4,5,6,7,8,9] 希望把list集合里面的每个元素都算成它的平方,也就是 list = [1,2,9,16,25,36,49,64,81]
#我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个 def f(x): return x*x print(map(f,range(1,10))) #输出结果 [1, 4, 9, 16, 25, 36, 49, 64, 81] #把集合中的字符串都改成 首字母大小 后边字母小写 def format_name(s): return s[0].upper()+s[1:].lower() #因为在python中字符串和数组都是序列,因此可以通过索引取对应的值 print map(format_name, ['kevin', 'ERIC', 'jacK']) #输出 ['Kevin', 'Eric', 'Jack']
#计算出下面集合每个元素所有的积 def prod(x, y): return x*y print reduce(prod, [1,2,3,4]) #计算出集合里面所有元素的乘积 #输出 24 #计算1、2、3...100的和 def total_sum(x,y): return x+y; print(reduce(total_sum,range(1,101))) #记住函数是不加括号的,只写函数名字就可以 #输出 5050
filter()函数也是接收一个函数 f 和一个集合 list, 它会对集合里面的每一个元素进行判断返回 True 和 False,自动过滤掉不符合条件的元素,筛选出符合条件的元素组成新的集合
#判断 集合里面的元素是不是空字符串 def is_empty(s): return s and len(s.strip())>0 print(filter(is_empty,['Eric ',' ',' Jack'])) #输出 ['Eric ', ' Jack'] #判断一个数开方 是否是整数 def is_sqr(x): r=int(math.sqrt(x)) return r*r==x print filter(is_sqr,range(1,101)) #输出 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
sorted()可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入的两个的元素 x, y,如果 x应该排在 y 的前面,返回 -1,如果 x应该排在 y 的后面,返回 1。如果 x和 y 相等,返回 0。它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x应该排在 y 的前面,返回 -1,如果 x应该排在 y 的后面,返回 1。如果 x和 y 相等,返回 0。
#sorted 默认按照从小到大排序 print(sorted([2,23,3,1,223])) #倒序排序 从大到小 def reversed_cmp(x,y): if x > y: return -1 if x < y: return 1 return 0 #正序排序 从小到大 def positive_cmd(x,y): if x < y: return -1 if x > y: return 1 return 0 #从高到低排序 print(sorted([88,8,211,985,3,16],reversed_cmp)) #输出 [985, 211, 88, 16, 8, 3] #从低到高排序 print(sorted([88,8,211,985,3,16],positive_cmd)) #输出 [3, 8, 16, 88, 211, 985]
有些时候,我们感觉没有必要写个函数时,直接写个匿名函数更方面,匿名函数关键字 lambda
a = map(lambda x:x*x,[1,2,3,4,5,6]) print(a) #输出 [1, 4, 9, 16, 25, 36] b = lambda x:-x if x < 0 else x print(b(-2),b(2)) #输出 (2, 2) def is_not_empty(s): return s and len(s.strip()) > 0 print filter(lambda s: s and len(s.strip())>0, ['test', None, '', 'str', ' ', 'END']) #输出 ['test', 'str', 'END']