萌小帅 一路向前

要有朴素的生活和遥远的梦想,不管明天天寒地冻,路遥马亡...^-^...

内置函数map, reduce, filter 的使用

内置函数map, reduce, filter 的使用方法类似,均为:第一个输入参数是函数,第二参数时sequence。

 

map

 对sequence的item 依次执行 函数。此处的函数可以是函数,自定义函数,匿名函数lambda。

  • 基本使用方法: map(function, sequence)
  • 使用中需要注意的是,在python2.7中,执行上述代码便可以直接显示结果,但在python3下,返回的结果需要重置类型,比如list,才能打印输出。
 1 """依次执行"""
 2 # map(str, range(5))   python 2.7下,这样就能直接显示结果,但在python 3下,这样显示不出结果也不能调用。
 3 # 需要:list一下
 4 ls = map(str, range(5))
 5 rs = list(ls)
 6 print(rs)
 7 # 匿名函数
 8 rs1 = list(map(lambda x: x+1, range(5)))
 9 print(rs1)
10 # 自定义函数
11 def func(x):
12     return x**2
13 rs2 = list(map(func, range(8)))
14 print(rs2)
15 
16 # 对于多参数,可以使用多参数的函数
17 def func1(x,y):
18     return x+y
19 rs3 = list(map(func1,"fabi","dais"))
20 print(rs3)

执行上述代码,例如第四行,map的作用就是使range(5)的数依次执行 str 的方法,返回的结果自然是["0","1","2","3","4"]。

整理一些遇到的map使用:

1 self.colors = list(
2             map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)),
3                 self.colors))
1 self.colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))

reduce

 对sequence的item 迭代执行 函数。

  • 基本使用方法:reduce(function,sequence)
  • 使用中需要注意的是,在python3中,reduce已经从内置函数中移除,放置在functools模块中。
  • 如果输入三个参数,则第三个参数为初始参数,也就是说,会在迭代过程中多一次第三个参数的运算。
  • 可以直接生成返回值。
1 """迭代执行"""
2 from functools import reduce
3 print(reduce(func1, range(10)))    # 做的是一个连加的运算
4 
5 print(reduce(lambda x,y:x*y, [1,2,3],2))   # 如果是三个参数,可以在原来运算的基础上,多一个第三个参数的运算

filter

 对sequence的item 依次执行 函数,返回为True( != 0)的item组合。

  • 基本使用方法: filter(function, sequence)
  • 和map一样,返回的结果需要重置类型。
1 def func2(x):
2     return x%2
3 print(set(filter(func2, range(4))))

返回值为{1,3}。

 

posted on 2018-08-29 17:37  墨殇浅尘  阅读(383)  评论(0编辑  收藏  举报

导航