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']