资讯详情

Python高阶函数_map,reduce,sorted和filter

标题

  • 高阶函数
  • 1.map
    • 1.1 使用自定义函数
    • 1.2 使用lambda表达式
    • 1.3 多个可迭代对象作为参数
    • 1.4 map函数的综合实例
  • 2.reduce
  • 3.sorted
    • 3.1 默认方法
    • 3.2 设置key为函数
    • 3.3 对字典进行排序
    • 3.4 按剩余大小排序
    • 3.5 sort()和sorted的区别
  • 4. filter
  • 小结

高阶函数

:传递函数作为参数的函数是高级函数。

def printInfo(): #定义函数     print("info...") printInfo() #输出结果:info...  #高阶函数 def runFunc(func): #定义参数     func() #调用传入函数 # 相当于调用printInfo() runFunc(printInfo) #以函数为参数值,括号中只有函数名 #输出结果:info... 

:可简化代码,组合lambda表达式,效果更好

1.map

:map(function, iterable, …) :将可迭代对象中的数据逐一取出,经函数处理后,将结果放入迭代器并返回迭代器。 :

  • func: 自定义函数 或者 内置函数
  • iterable: 可迭代对象(常用:容器类型数据,range对象,迭代器)
  • 返回值:迭代器
##################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################map######################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## l1 = ["1","2","3","4"] res = [] for i in l1:     res.append(int(i)) print(res) #[1, 2, 3, 4] #################map######################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## res = map(int, l1) #print(res,type(res)) #<map object at 0x0447F150> <class 'map'> print(list(res))#[1, 2, 3, 4] 

1.1 使用自定义函数

# 要求列表中字符串表示的平方值 l1 = ["1","2","3","4"] def getSquare(x): return int(x)**2#必须有返回值 res = map(getSquare,l1) print("自定义函数:",list(res))#输出结果:自定义函数:[1, 4, 9, 16] 

1.2 使用lambda表达式

l1 = ["1","2","3","4"]
res = map(lambda x:int(x)**2,l1) #体现出了匿名函数的特点
print("lambda表达式:",list(res)) #输出结果:lambda表达式: [1, 4, 9, 16]

1.3 多个可迭代对象,作为参数

l1 = [1,2,3,4]
l2 = [5,6,7,8]
# 分别获取两个迭代对象的元素,作为lambda表达式的参数
res = map(lambda x,y: x+y,l1,l2 )#每次l1和l2中各拿一个值
print(list(res)) # 输出结果:[6, 8, 10, 12]

1.4 map函数的综合实例

:将下面的字典进行键值对互换: dic = {“北京”:“京”,“上海”:“沪”,“广东”:“粤”,“四川”:“川”}

dic = { 
        "北京":"京","上海":"沪","广东":"粤","四川":"川"}
res = { 
        }
for a,b in dic.items():
    res[b] = a
print(res)
#输出结果:{'京': '北京', '沪': '上海', '粤': '广东', '川': '四川'}

dic = { 
        "北京":"京","上海":"沪","广东":"粤","四川":"川"}
def change(item): #获取到的item是元组类型
    return (item[1],item[0]) #重新构造元组的内容
res = map(change,dic.items())
print(dict(res))
#输出结果:{'京': '北京', '沪': '上海', '粤': '广东', '川': '四川'}

res = map(lambda item:(item[1],item[0]),dic.items())
print(dict(res)) #可以直接通过dict进行强制类型转化为字典
#输出结果:{'京': '北京', '沪': '上海', '粤': '广东', '川': '四川'}

详细分析: (1)dic.items()返回dict_items([('北京', '京'), ('上海', '沪'), ('广东', '粤'), ('四川', '川')]) (2)map函数每次从中取一个元组,例如:第一次取('北京', '京'),然后利用lambda表达式交换键值对的位置,变为('京','北京',),依次处理后面的元组。

2.reduce

: reduce(function, sequence[, initial]) -> value :给定序列,依次取出1个元素作为参数,与前一次函数结果进行函数运算,最后返回运算结果

  • func 自定义函数 或者 内置函数
  • iterable 可迭代对象(常用:容器类型数据 range对象 迭代器)
  • 返回值:最终的计算结果
#将列表中每个元素相乘
from functools import reduce
obj = [1,2,3,4,5]
def multi(x,y):
    return x*y
res = reduce(multi,obj)
print(res,type(res)) #输出结果:120 <class 'int'>

:使用lambda表达式,完成下面计算:

  • f(1) = 1
  • f(n) = f(n-1) * n + 1
# 步骤:分析
# f(4) = f(3) * 4 + 1 => 10 * 4 + 1 = 41
# f(3) = f(2) * 3 + 1 => 3 * 3 + 1 = 10
# f(2) = f(1) * 2 + 1 => 1 * 2 + 1 = 3
#使用递归方式实现:
def getRes(x):
    if x == 1:
        return 1
    return getRes(x-1) * x + 1
print(getRes(4)) #输出结果:41

使用reduce实现:

from functools import reduce
res = reduce(lambda x,y:x*y+1,range(1,5))
print(res) #输出结果:41

【补充】可以设置初始值

from functools import reduce
res = reduce(lambda x,y:x+y,range(1,5))
print(res) #输出结果:10
res = reduce(lambda x,y:x+y,range(1,5),100)
print(res) #输出结果:110

3.sorted

:sorted(iterable,reverse=False,key=函数) -> Iterator :排序

  • iterable: 可迭代对象(常用:容器类型数据,range对象,迭代器)
  • reverse: 是否倒序
  • 默认正序reverse=False(从小到大)如果reverse=True 代表倒序(从大到小)
  • key = 自定义函数或者内置函数
  • 返回值:排序的序列

3.1 默认方法

lst = [1,3,2,5,8,-2]
print(sorted(lst))#输出结果:[-2, 1, 2, 3, 5, 8]
#使用revere=True
lst = [1,3,2,5,8,-2]
print(sorted(lst,reverse=True))#输出结果:[8, 5, 3, 2, 1, -2]

3.2 设置key为函数

lst = [1,3,2,5,8,-2]
print(sorted(lst,key=abs)) #逐一取出每个数值进行计算后,按照计算结果,排序输出
                           #输出结果:[1, 2, -2, 3, 5, 8]

3.3 对字典进行排序字典

dic = { 
        3:"A",2:"C",-1:"B"}
print(sorted(dic))#字典排序默认输出排序后的键值序列
                   #输出结果:[-1, 2, 3]

3.4 按余数大小进行排序

lst = [20, 31, 47, 19, 15]
res = sorted(lst,key=lambda x:x%3)
print(res)#输出结果:[15, 31, 19, 20, 47]

3.5 sort()和sorted的区别

  • 只是应用在 list 上的方法,(就地排序无返回值)
  • 是高阶函数,可对所有可迭代的对象进行排序操作,(返回新的list)
lst = [1,3,2,5,8,-2]
print("排序前:",lst)
lst.sort()
print("sort排序后:",lst) #改变了原有的序列
lst2 = sorted(lst) #产生新列表
print("新列表:",lst2)
print("sorted排序后:",lst)
排序前: [1, 3, 2, 5, 8, -2]
sort排序后: [-2, 1, 2, 3, 5, 8]
新列表: [-2, 1, 2, 3, 5, 8]
sorted排序后: [-2, 1, 2, 3, 5, 8]

4. filter

:filter(func,iterable) -> iterator :过滤数据

  • 如果函数的返回值是True,代表保留当前数据
  • 如果函数的返回值是False,代表舍弃当前数据

  • func 自定义函数
  • iterable 可迭代对象(常用:容器类型数据,range对象,迭代器)
  • 返回值:迭代器
lst = [1,2,3,4,21,32,43,54]
res = filter(lambda x:True if x%2 == 0 else False,lst)#留下符合要求的,不符合要求的过滤掉
print(list(res))#输出结果:[2, 4, 32, 54]

小结

本篇文章简要的说明了高阶函数的基本概念,具体的介绍了map函数、reduce函数、sorted函数和filter函数的用法,通过学习这些函数可以帮助我们进一步简化代码。

标签: revere传感器csprevere传感器kis

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台