高阶函数

 一 . 高阶函数

Google 文章

python 内置了map() 和 reduce()函数

map()
原型: map(fn,lsd)

参数1 是函数
参数2 是序列

功能: 将传入的函数依次作用在序列的没一个元素,
并把结果作为新的Iterator返回

1. 阶高函数map

 

# 将单个字符串转换成对应的字面量整数
def chr2int(chr):
 return {"0":0,"1":1,"2":2,"3":3,"4":4,
 "5":5,"6":6,"7":7,"8":8,"9":9}[chr]
 listl=["2","1","6","5"]

res=map(chr2int,listl)
# 相当于 chr2int("2") chr2int("1") chr2int("6") chr2int("5")

print(res) #这个打印出来是惰性列表 <map object at 0x003B3710>

print(list(res)) #这样是个列表 [2, 1, 6, 5]
print(type(res)) #<class 'map'>
print("*******************华丽的分割线*************************")

# 将整数元素的序列,转为字符串型
# [1,2,3,4]->["1","2","3","4"] 
l=map(str,[1,2,3,4])
print(list(l)) #['1', '2', '3', '4']
阶高函数reduce
from
functools import reduce reduce(fn ,lsd) 参数1为函数 参数2为列表 功能 一个函数作用在序列上,这个函数必须接受两个参数, reduce 把结果继续和序列的下一个元素累计计算 例如: reduce(f,[a,b,c,d]) 相当于 f(f(f(a,b),c),d) # 求一序列的和 list2=[1,2,3,4,5] # 1+2 # 1+2+3 # 1+2+3+4 # 1+2+3+4+5 def aa(x,y): return x+y r=reduce(aa,list2) print("r=",r) #15

阶高函数reduce
from functools import reduce

# reduce(fn ,lsd)

# 参数1为函数

# 参数2为列表

# 功能  一个函数作用在序列上,这个函数必须接受两个参数,
#       reduce 把结果继续和序列的下一个元素累计计算
# 例如:
#      reduce(f,[a,b,c,d])  相当于 f(f(f(a,b),c),d)

# 求一序列的和
list2=[1,2,3,4,5]
# 1+2
# 1+2+3
# 1+2+3+4
# 1+2+3+4+5
def  aa(x,y):
    return x+y
r=reduce(aa,list2)  

print("r=",r)     #15

 2. reduce和map案例

# 1356 案例分析
"""
0x1+1
1x10+3
13x10+5
135x10+6
"""

from functools import reduce

# 将字符串转换成对应字面量数字
def srt2int(str):
    def fc(x,y):
         return x*10+y
    def fs(chr):
        return {"0":0,"1":1,"2":2,"3":3,"4":4,
           "5":5,"6":6,"7":7,"8":8,"9":9}[chr]     
    return reduce(fc,map(fs,list(str))) #相当于 map(fs,list(str))=》12367

a=srt2int("12367")    
print(a)  # 12367
print(type(a))   #  <class 'int'>

3 .高阶函数filter

# 原型  : filter (fn,lsd)

# 参数1 为函数

# 参数2 为序列

# 功能: 过滤   

# 白话文 : 把传入的函数依次作用与序列每个元素,
#             根据返回的是True还是False 决定是否保留改元素

listl=[1,2,3,4,5,6,7,8,9]

# 筛选条件
def func (num):

    # 偶数保留
    if num%2==0:
        return True
    # 奇数剔除
    return False

L=filter(func,listl)

print(list(L))  #[2, 4, 6, 8]

print("*******************华丽的分割线*************************")

# 数据的过滤
data=[["姓名","年龄","爱好"],["tom",25,""],["tom",2555500000,"金钱"]]
def func2(v):
    v=str(v)
    if v=="":
      return False
    return True
for line in data:
    m=filter(func2,line)
    print(list(m))

# ['姓名', '年龄', '爱好']
# ['tom', 25]
# ['tom', 2555500000, '金钱']
高阶函数sorted
# sorted 排序

# 排序 : 冒泡 选择  快速   插入   计数器
#升序排列
list1=[4,7,2,6,3]
list2=sorted(list1)  #默认升序
print(list2)     #[2, 3, 4, 6, 7]

print("*******************华丽的分割线*************************")

# 按照绝对值大小来排序的
list3=[4,-7,2,6,-3]
list4=sorted(list3,key=abs)  # key接受函数来实现自定义排序规则
print(list4)   # [2, -3, 4, 6, -7]


print("*******************华丽的分割线*************************")


# 降序排序
list5=[4,7,2,6,3]
list6=sorted(list5,reverse=True)
print(list6)  #   [7, 6, 4, 3, 2]

print("*******************华丽的分割线*************************")


# 字符串排序是阿斯扣吗值
list7=["a","b","c","d","e"]
list8=sorted(list7)  #默认升序
print(list8)     #['a', 'b', 'c', 'd', 'e']

 

 

 

 

 

 

 

 

 

 

posted @ 2019-01-14 11:55  Loversuperme  阅读(215)  评论(0编辑  收藏  举报