python中的map,reduce,filter,sorted,lambda表达式

时间:2021-11-17 19:26:15

     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]

python中的map,reduce,filter,sorted,lambda表达式

#我们只需要传入函数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']


      reduce()函数接收的参数和map函数类似,也是一个函数 f 和一个集合 list,,但是每次必须传入 2个参数,并返回 最终结果值
#计算出下面集合每个元素所有的积
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']