Python之高阶函数(map(),reduce(),filter(),sorted())

概念

以一个函数作为参数,返回一个结果,被称为高阶函数

map() 

map(function,Interable),其中function:函数;Interable:可迭代对象【list,tuple,dict,set,string,生成器】

#需求1:给一个已知列表中的元素求平方
def square(x):
    return  x ** 2
list1 = [1,2,3,4,5]
result1 = map(square,list1)
print(result1)   #<map object at 0x00000245058B0DD8>
print(type(result1))   #<class 'map'>
print(list(result1))   #[1, 4, 9, 16, 25]


#需求2:将整型元素的列表转换为字符串元素的列表
#举例:[1,2,3,4,5]---->[“1”,'2','3','4']
#str(1) ---->’1‘
#注意:在使用系统函数之前,最好不要出现同名的变量
result3 = map(str,[1,2,3,4])
print(list(result3))


#需求3:已知两个整型列表,将两个列表中相同位置的元素求和,返回一个新的列表
l1 = [1,2,3,4]
l2 = [5,6,7,8]
#[6,8,10,12]
def add(x,y):
    return  x + y
result4 = map(add,l1,l2)
print(list(result4))

作用:将传入的函数依次作用于可迭代对象中的每一个元素,并将结果返回

reduce() 

reduce(function,Iterable) ,其中function;函数;Iterable:可迭代对象,最常用的是list

from  functools import reduce
#需求1:求一个已知列表中所有元素的和
list1 = [1,2,3,4,5]
def add(x,y):
    return  x + y

result1 = reduce(add,list1)
print(result1)   #15


#需求2:将列表[1,3,5,7,9]转换为整数13579
list2 = [1,3,5,7,9]
def func(x,y):
    return  x * 10 + y

result2 = reduce(func,list2)
print(result2)


#需求3:结合map函数,实现一个将str转换为int的函数    int()
#前提:字符串为全数字组成的
def strToInt(s):
    d = {"0":0,"1":1,"2":2,"3":3}
    return d[s]

#第一步:将字符串中的每一个字符转换为对应的整型,得到一个列表
result3 = map(strToInt,"2301")
print(list(result3))   #[2, 3, 0, 1]

#第二步:将列表中的每一个数字元素进行累积
result4 = reduce(func,list(result3))
print(result4)     #2301

作用:通过函数对可迭代对象中的元素进行累积,如何进行累积取决于函数中是如何实现的

工作原理:用传给reduce的fucntion先作用于list中的第一个和第二个元素,用得到的结果和list中第三个元素再进行指定的计算。。。

filter() 

filter(function,Iterable),其中 function:函数,Iterable:可迭代对象,最常用的是list

#需求1:将已知列表中的偶数元素筛选出来
list1 = [1,2,3,4,5,6,7,8,9,10]

def func(num):
    #保留偶数元素
    if num % 2 == 0:
        return  True

    #剔除奇数元素
    return  False

result1 = filter(func,list1)
print(type(result1))        #<class 'filter'>
print(list(result1))        #[2, 4, 6, 8, 10]

#需求2:将下面列表中 爱好为"无"的数据剔除掉
data = [["姓名","爱好","年龄"],["jack","dance",10],["bob","无",18]]
def func2(v):
    v = str(v)
    if v == "无":
        return  False
    return True

for line in data:
    result2 = filter(func2,line)
    print(list(result2))
'''
['姓名', '爱好', '年龄']
['jack', 'dance', 10]
['bob', 18]
'''

作用:进行数据的过滤

工作原理:将传入的函数依次作用于列表中的每一个元素,根据返回的结果为True或者False决定元素是否需要保留

sorted() 

#1.普通排序
#注意:生成了一个新的列表,默认为升序排序
list1 = [3,2,5,6,2,4]
list2 = sorted(list1)
print(list1)       #[3, 2, 5, 6, 2, 4]
print(list2)       #[2, 2, 3, 4, 5, 6]

#2.按绝对值排序
#注意:sorted函数中,可以通过关键字key进行指定排序的规则
list3 = [-4,27,-10,5]
list4 = sorted(list3,key=abs)
print(list4)     #[-4, 5, -10, 27]

#3.降序排序
#注意:关键字reverse,reverse=True说明降序
list5 = sorted(list1,reverse=True)
print(list5)       #[6, 5, 4, 3, 2, 2]

#4.字符也可以排序,排序的规则:在字典中出现的先后顺序
list6 =['g','o','f','a']
list7 = sorted(list6)
print(list7)        #['a', 'f', 'g', 'o']

#5.自定义函数:按照字符串的长度进行排序
def myLen(s):
    return len(s)
list8 = ["fhgh","hello","abc","ll"]
list9 = sorted(list8,key=myLen,reverse=True)
print(list9)          #['hello', 'fhgh', 'abc', 'll']

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值