python中的高阶函数

高阶函数

1、map
map(func,Iterable)

功能:
把Iterable中的数据一个一个拿出来,扔到func中做处理
把处理后的结果放到迭代器中,最后返回迭代器
参数:
func:自定义函数
Iterable:可迭代性数据(容器类型数据、range对象、迭代器)
返回值:
迭代器
#常规写法

lst = ["1","2","3","4"]
lst_new = []
for i in lst:
    lst_new.append(int(i))
print(lst_new)


用map高阶函数改写:

lst = ["1","2","3","4"]
it = map(int,lst)
print(list(it))


运行结果:


代码解析:
先把"1" 扔到int当中做处理,将强转后的结果扔到迭代器中
然后把"2" 扔到int当中做处理,将强转后的结果扔到迭代器中
然后把"3" 扔到int当中做处理,将强转后的结果扔到迭代器中
然后把"4" 扔到int当中做处理,将强转后的结果扔到迭代器中
最终返回迭代器


2、filter(func,iterable)

功能: 过滤数据
return True 当前这个数据保留
return False 当前这个数据舍弃
参数:
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值:
迭代器
在lst = [1,2,3,4,5,6,7,8,9,10]中筛选出所有偶数,并将筛选出的数字添加到一个新列表。
常规写法:

lst = [1,2,3,4,5,6,7,8,9,10]
lst_new = []
for i in lst:
    if i % 2 == 0:
        lst_new.append(i)
print(lst_new)


运行结果:

 


用filter高阶函数进行改写(套用lambda表达式,如不清楚可查看之前函数part3中匿名函数相关写法)

lst = [1,2,3,4,5,6,7,8,9,10]
it = filter(lambda n : n % 2 == 0,lst)
print(list(it))



同样可得到以上结果。


3、reduce(func,iterable)


功能:计算数据
先把iterable中的前两个值拿出来,扔到func当中做运算,
把计算的结果和iterable中的第三个元素在扔到func当中做运算,
再把结果算出来,和第四个元素做运算,以此类推
直到所有结果运算完毕.返回该结果
参数:
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值:
计算之后的结果

将列表[5,4,8,8]转为整型5488:

常规写法:

lst = [5,4,8,8]
it = iter(lst)
num1 = next(it)
num2 = next(it)
num = num1 * 10 + num2
for i in it:
    num = num * 10 + i
print(num)


用reduce高阶函数进行改写:

from functools import reduce
lst = [5,4,8,8]
res=reduce(lambda x,y:x*10+y,lst)
print(res)


运行结果:



4、sorted(iterable,key=函数,reverse=False)

功能:排序
参数:
iterable(容器类型数据,range对象,迭代器)
key 指定 自定义函数或 内置函数
reverse : 代表升序或者降序 , 默认是升序(从小到大排序) reverse=False
返回值:
排序后的结果

lst = [1,2,3,4,5,-90,-4,-1,100]
res = sorted(lst)
print(res)


默认从小到大排序:
运行结果:

è¿è¡ç»æ


reverse进行反转

res = sorted(lst,reverse=True)
print(res)


sort和sorted区别:
(1) sorted可以排序一切容器类型数据, sort只能排列表
(2) sorted返回的是新列表,sort是基于原有的列表进行修改
(3) 推荐使用sorted

 


————————————————
原文链接:https://blog.csdn.net/qq_39787513/article/details/107501887

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值